第二章 库的操作
注意接下来几章大多数的指令和操作都是在数据库中进行的。从Linux进入MySQL的指令为mysql -uroot -p
之后输入密码即可进入。使用quit
即可退出
创建数据库
语法:[]
为可省略项1
2
3
4
5CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification]
...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
在这里有几点需要说明的是在创建数据库的语法中,附加选项collate
表示的是校验规则,这个对字符排序有一些影响,我们后面会详细讲解。character
表示的是字符编码规范。我们知道常用的编码规范有UTF-8
,GB2312
,GBK
等等,不同的编码格式对字符的处理方式不同,而如果用不符的编码规范去打开别的编码规范的文本文件则会造成乱码,这是很我们经常会遇到的麻烦之一,但是有一种通用的变长编码,虽然所占空间可能会更多但是也使得编码更加方便容易,能减少很多麻烦,这种规范就是UTF-8
,我们在安装MariaDB的时候所做的配置中就已经将数据库默认的编码规范更改为UTF-8
了,因此我们在编码规范上也就不用做其他设置,使用默认的UTF-8
即可。如果需要使用别的编码也只需要在建库的时候加上character set charaset_name
语句即可。
创建实例:
1、create database db1;
:创建一个校对规则和字符规范全为默认值的数据库db1
。
2、create database db2 charset=utf8;
:创建一个使用utf-8
字符集,校对规则默认的数据库db2
。
3、create database db3 charset=utf8 collate utf8_general_ci;
:创建一个使用utf-8
校对规则为utf8_general_ci
的数据库db3
。
字符集和校验规则
查看系统默认字符集及校验规则
1、show variables like 'character_set_database';
:查看系统默认的字符集。
2、show variables like 'collation_database';
:查看系统默认校验规则。
查看系统支持的字符集及校验规则
1、show charset;
:查看系统支持的字符集。
2、show collation;
:查看系统支持的校验规则。
校验规则对数据库的影响
1、首先我们分别创建两个库分别使用不同的校验规则utf8_general_ci
和utf8_bin
分别命名为db1
和db2
。1
2create database db1 collate utf8_general_ci;
create database db2 collate utf8_bin;
2、向数据库db1
中创建一个表,并且存入相应的数据。1
2
3
4
5
6use db1;
create table person
(
name varchar(20)
);
insert into person values('a'),('A'),('b'),('B');
对数据库db2
执行同样的操作。1
2
3
4
5
6use db2;
create table person
(
name varchar(20)
);
insert into person values('a'),('A'),('b'),('B');
3、对数据库db1
中的数据进行查询,根据name
进行排序。1
2use db1;
select * from person order by name;
结果如下:1
2
3
4
5
6
7
8+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
对数据库db2
进行同样的查询。1
2use db2;
select * from person order by name;
结果如下:1
2
3
4
5
6
7
8+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
可以看出同样的操作因为校验规则的不同,导致查询的排序结果不同,这是因为一个排序区分大小写,而另一个不区分所造成的,为了达到统一,我们统一默认使用utf8_general_ci
的校验规则。
操作数据库
查看当前数据库
show databases;
:查看当前已有的数据库。
示例:1
2
3
4
5
6
7
8
9
10MariaDB [Misaki]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Misaki |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
显示创建语句
show create database 数据库名
。
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14MariaDB [Misaki]> show create table hero;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hero | CREATE TABLE `hero` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(20) NOT NULL COMMENT '名称',
`hp` int(11) DEFAULT NULL COMMENT '血量',
`mp` int(11) DEFAULT NULL COMMENT '蓝条',
`describle` varchar(50) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
修改数据库
语法:1
2
3
4
5ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
对数据库的修改主要是修改字符集和校验规则。
实例:1
2MariaDB [Misaki]> alter database Misaki charset=utf8;
Query OK, 1 row affected (0.00 sec)
将Misaki
数据库的字符集改为utf-8
。
数据库删除
语法:DROP DATABASE [IF EXISTS] db_ name;
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25MariaDB [Misaki]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Misaki |
| db1 |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [Misaki]> drop database db1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [Misaki]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Misaki |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
数据库备份和删除
以下操作前#
表示在退出MySQL在Linux下执行,mysql
表示在MySQL下执行。
数据库备份
语法:# mysqldump -u root -p 数据库名 > 数据库备份存储的文件路径
示例:# mysqldump -u root -p db1 > mytest1.sql
之后即可发现目录下多出了mytest1.sql的文件,这个文件就存储了数据库的有关信息。
数据库恢复
语法:# mysql -u root -p 数据库名 < 数据库备份存储的文件路径
示例:# mysql -u root -p db1 < mytest1.sql
以上这种数据库备份及恢复的方法可适用于大多数情况,不过在恢复前需要在数据库中先建立一个空库用于恢复备份。数据库备份还有很多种方式,但是推荐使用这种,因为更为方便和便于使用。
查看连接情况
show processlist
。
可以告诉我们有哪些用户连接到了我们的MySQL,如果查出有哪个用户不是正常登录,则数据库有可能被入侵了。
以上就是关于库的基本操作,多操作才能完全掌握,熟能生巧。