接下来学的数据库的操作以及表的结构操作,都是属于我们之前讲的 DDL
也就是数据定义语言,它负责的是对结构的管理,而不是对数据内容的管理!
create database [if not exists] db_name [create_specification, create_specification, ...]
其中create_specification为:
[default] character set charset_name
[default] collate collation_name
CHARACTER SET
:指定数据库采用的字符集,相当于 数据写入数据库时的格式COLLATE
:指定数据库字符集的校验规则,相当于 读取数据库数据时的格式utf8
,校验规则是:utf8_general_ci
创建名为 d1
的数据库:
create database d1;
创建一个使用 utf8
字符集的 db2
数据库:
create database db2 character set utf8;
或者
create database db2 charset=utf8;
创建一个使用 utf8
字符集,并带对应校验规则的 db3
数据库:
create database db3 character set utf8 collate utf8_general_ci;
或者
create database db3 character=utf8 collate utf8_general_ci;
因为上面的例子中我们设的字符集和校验规则都是和默认配置中的是一样的,所以看不出来什么效果,下面我们在讲字符集和校验规则的时候会举一点不同的例子!
show variables like 'character_set_database';
show variables like 'collation_database';
其实我们是可以使用 匹配符 %
来看看其它部件设定的字符集以及校验规则:
字符集主要是控制用什么语言,比如 utf8
就可以使用中文。
show charset;
show collation;
我们还是要看看校验规则的不同,会有什么样子的效果,下面我们用两个不同校验规则的数据库来做测试!
首先我们创建两个字符集相同,但是校验规则不同的数据库:
不区分大小写
创建一个数据库,校验规则使用 utf8_general_ci
[不区分大小写]
create database db1 charset=utf8 collate utf8_general_ci;
use db1;
创建一个表:
create table person (name varchar(20));
插入几组对应的大小写字母:
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
区分大小写
创建一个数据库,校验规则使用 utf8_bin
[区分大小写]
create database db2 charset=utf8 collate utf8_bin;
use db1;
创建一个表:
create table person (name varchar(20));
插入几组对应的大小写字母:
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
然后下面我们分别对两个数据库特定的字符进行查询和排序:
查询
不区分大小写的查询以及结果:
mysql> use db1;
Database changed
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
| A |
+------+
2 rows in set (0.00 sec)
区分大小写的查询以及结果:
mysql> use db2;
Database changed
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
+------+
1 row in set (0.00 sec)
可以看到,不区分大小写的校验规则,查询结果是 a
和 A
,因为它们是一样的!而对于区分大小写的校验规则,查询结果就是唯一的 a
。
排序
不区分大小写排序以及结果:
mysql> use db1;
Database changed
mysql> select * from person order by name;
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
4 rows in set (0.00 sec)
区分大小写排序以及结果:
mysql> use db2;
Database changed
mysql> select * from person order by name;
+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
4 rows in set (0.00 sec)
可以看到,不区分大小写的话,a
和 A
是排在一起的,并且是不关 ASCII
值大小的,但是总体会比 b
和 B
小;对于区分大小写来说,就是按照 ASCII
值来排序的!
最后总结一句话,一般我们都是在配置文件中写好默认的字符集和校验规则,并且直接创建数据库即可,很少需要手动去设置其它的编码规则!
show databases;
show create database db_name;
MySQL
建议我们关键字使用大写,但是不是必须的。/*!40100 default.... */
这个不是注释,表示当前 mysql
版本大于 4.01
版本,就执行这句语句!use db_name;
有时候可能我们使用时间长了,不知道当前在使用那个数据库,那么我们可以调用一个 database()
函数,如下所示:
select database();
drop database [if exists] db_name;
执行删除之后的结果:
注意:不要随意删除数据库!
alter database db_name [alter_spacification, alter_spacification, ...]
其中alter_spacification:
[default] character set charset_name
[DEFAULT] collate collation_name
举个例子,将 db1
数据库字符集改成 gbk
:
show processlist;
可以告诉我们当前有哪些用户连接到我们的 MySQL
,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
语法如下所示:
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径(一般备份为.sql文件)
举个例子,将之前的 db1
数据库备份到文件(退出连接):
[root@VM-8-7-centos ~]# pwd
/root
[root@VM-8-7-centos ~]# mysqldump -P3306 -uroot -p -B db1 > db1.sql
[root@VM-8-7-centos ~]# ls
db1.sql
这时,可以打开看看 db1.sql
文件里的内容,其实它把我们整个创建数据库,建表,导入数据的语句都装载这个文件中,这样子是为了在恢复数据库的时候的操作!
语法如下所示:
source 数据库备份存储的文件路径;
注意这是在数据库中的操作!
下面我们将 db
数据库进行恢复:
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| README_TO_RECOVER_A |
| mysql |
| performance_schema |
| sys |
+---------------------+
5 rows in set (0.00 sec)
mysql> source /root/db.sql; #进行恢复
Query OK, 0 rows affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
……
……
mysql> show databases; #查看数据库,多了db
+---------------------+
| Database |
+---------------------+
| information_schema |
| README_TO_RECOVER_A |
| db |
| mysql |
| performance_schema |
| sys |
+---------------------+
6 rows in set (0.00 sec)
mysql> use db;
Database changed
mysql> select * from person; #原来的数据都还在
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
4 rows in set (0.00 sec)
如果备份的不是整个数据库,而是其中的一张表的话:
mysqldump -u root -p 数据库名 表名1 表名2 > 数据库备份存储的文件路径(一般备份为.sql文件)
同时备份多个数据库:
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上 -B
参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用 source
来还原。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有