库的操作
如果想到 mysql 客户端当中数据 系统当中的命令的话,直接输入的话,会被认为是 mysql 当中的命令。
所以,在mysql 当中执行系统当中的命令的话,要在系统命令之前带上 ststem ,表示系统命令:
但是不是所有命令都是可以使用的,只能使用部分命令。
创建/删除 数据库
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: 指定数据库字符集的校验规则
IF NOT EXISTS : 表示的是 如果当前没有这个要创建的数据库,才会对这个数据库进行创建。
创建名为 db1 的数据库:
create database db1;
其实上述创建数据库的本质其实就是在 指定存储数据库文件的目录当中,创建一个目录。
删除一个数据库:
drop database db_name;
而,删除一个数据库其实本质也就是 在指定存储数据库文件的路径当中删除某一个目录。
所以,其实你在 指定目录当中直接删除掉 指定的目录 文件,也可以达到把这个数据库目录删除的目的。但是我们不建议及这样做,我们还是推荐使用 数据库当中的 drop databases 命令来删除一个数据库。
数据库的 编码集 和 校验集
因为各种语言的不同,所以在计算机表示语言的编码格式不同,所以,数据库当中规定,使用某一种编码格式来 存储数据之时,就必须用 同一种编码格式来取出数据。
而数据库的编码集,是数据库在存储数据之时,使用的编码格式。
数据库的 校验集,是用户在使用数据库进行数据的 增删改查的过程当中,对于用户使用的编码格式,和数据库当中存储的数据的编码格式做效验的作用。
数据库的 校验集,支持数据库 进行字段的比较使用的编码。本质也是一种 读取数据库当中读数据采用的编码格式。
总结:
数据库对数据做的任何操作,都必须保证操作当中使用的编码 和 存储数据所使用的编码必须是一样的。
查看当前数据库当中有什么表:
show tables;
查看数据库本身的编码集:
show variables like 'character_set_database';
可以发现我们当前数据库的编码格式是 latin1 这个编码格式的。
查看你数据库的校验集:
show variables like 'collation_database';
查看其他的校验集:
show variables like 'collation_%';
由上述可以看到,链接 和 服务器当中使用的 是 utf-8 的编码格式。
还可以查看数据库支持的所有的字符集:
show charset;
使用上述的命令,可以查看到当前数据库所支持的字符集编码格式。
查看数据库支持的 校验集 编码格式:
show collation;
指定 编码格式 和 校验规则 创建数据库
上述创建数据库的方式是直接进行创建,那么就会使用的默认的创建方式,这个默认的编码格式是在数据库的配置文件当中进行设置的。
那么,如果我们想要指定编码格式来 创建数据库的话,可以像如下方式来进行操作:
create database d1 charset=utf8;
像上述的方式就是以 utf-8 的方式来创建 d1 这个数据库。
除了使用上述的方式,还可以使用下述的方式定义数据库的编码格式:
create database d2 character set utf8;
上述是指明数据库的编码格式,我们还可以指明数据库的校验规则:
create database d3 charset=utf8 collate utf8_general_ci;
如果想要查看数据库的编码格式 和 校验规则的话,需要查看这个数据库目录当中的 db.opt 这个配置文件。
你可以看到,d3 这个数据库的 编码格式 和 校验格式 都是 utf-8 的。
数据库的校验规则对数据库的影响
区分大小写 于 不区分大小写
我们分别使用 utf8_general_ci 和 utf8_bin 两种校验规则,和 utf-8 的同一种编码规则来分别创建两个数据库:
create database test1 collate utf8_general_ci;
create database test2 collate utf8_bin;
此时这两个数据库的 编码格式是一样的,但是 校验规则是不一样的:
然后我们对两个数据库当中进行 建表的操作:
在 test1 数据库当中建立一个 person 表:
查看 test1 当中的全部表:
查看 Perosn的 表结构:
向 test1 数据库当中的person 表插入一些值:
此时,我们查询 perosn 表当中 name='a' 的字段的话,发现不管是 'a' 还是 'A' 都被查找出来了:
说明,utf8_general_ci 这个校验规则是不区分大小写的。
同样的,我们在 test2 数据库当中也创建一个person表;
还是插入一些 大小写的 数据:
此时查询 name='a' 的字段,发现只查找出了 'a' 的字段:
说明,utf8_bin 是区分大小的写的。
区分大小写 于 不区分大小写排序以及结果
test2 当中对 name 进行排序输出:
test1 当中对 name 进行排序输出:
因为 在 ascll 表当中,大写字符的 ascll 码值 是要小于 小写字符的 ascll 码值的,所以,在区分大小写的 text2 数据库的当中,排序结果就是按照 升序来 排列的。
但是,在 text1 数据库使用的 校验规则 是不区分大小写的,所以,对于 'a' 和 'A' 两个字符是一个字符,所以直接进行输出。
上述的例子,告诉我们一件事情:
数据库的校验集是会影响我们的查询,比较结果的。
库的 删改查
查看数据库
show databases;
显示创建语句
show create database 数据库名;
例子:
mysql> show create database mytest;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| mysql | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
- MySQL 建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字。
- /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话。
数据库删除
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
- 对数据库的修改主要指的是修改数据库的字符集,校验规则。
比如:修改 test2 数据库的 编码集 和 校验集:
查看 test2 数据库的 编码集 和 校验集:
数据库的备份和恢复
如果是在 Linux 当中我们想对 一个文件进行的备份的话,其实就是把这个文件拷贝一份。文件夹的话,就是使用 zip 等等命令压缩的一下,打个包,备份一下。
但是,如果是在数据库当中进行上述方式进行备份的话,那么如果这个数据库是在 版本5.7 创建的话,打包备份到其他 数据库版本,比如是 5.0 ,那么可能这个数据库就因为环境的不兼容,所以就不能使用了。
所以,像上述这种直接打包数据库的文件的操作我们是完全不推荐的。
在现如今的数据库版本当中,对于数据库名字的修改命令已经没有了。这是因为,如果你修改了数据库的名字,同时有别人正在访问这个数据库的话,那么别人来说体验就极其不好了。
mysqldump 工具 和 source
但是,对于数据的文件的备份在数据库当中是命令来实现的:
对于 mysqldump 这个工具,在安装 mysql 之时就已经安装了。
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
- -P:要使用的端口号;
- -u:要使用的用户
- -p:用户对应的密码
- -B:要拷贝的数据库名,然后使用 ">" 指定这个数据库要拷贝到的 文件路径,也就是 重定向到这个路径当中。
比如现在我们要拷贝这个 test1 的这个数据库:
如上所示的操作,就会帮我们把 test1 数据库的内容拷贝到 test1.sql 这个文件当中。
但是,在这个 test1.sql 文件当中存储的其实是我们曾经对 test1 的各种操作的命令,还有一些配置文件等等,我们使用 vim 打开这个拷贝过后的文件:
这些都是我们曾经对 test1 这个数据库当中曾经使用的过的 有效操作。
所以,以后当有别人拷贝了上述的 test1.sql 这个拷贝过后的文件的话,即使在对方的mysql 当中是没有 test1 这个数据库的,但是可以通过这个 test1.sql 文件,直接创建出一个 于test1相同的数据库出来:
使用 下述的命令来使用上述的 test1.sql 文件创建一个新的 数据库出来:
source 备份文件所在路径;
此时就相当于是 使用 test1.sql 文件当中的 保存的 有效操作的命令,就可以创建出一个 和 原本test1 数据库相同的数据库出来。
注意:如果上述在使用 mysqldump 工具之时,没有使用 -B 选项指定 数据库,那么他会默认在当前 use 的数据库当中记录 有效操作,但是在这些操作当中是不会记录 create 数据库这个操作的。所以,此时请先创建一个数据库,在使用 source 命令还原数据库。
备份的不是整个数据库,而是其中的一张表:
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
同时备份多个数据库:
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
查看当中数据库的链接情况
show processlist
使用上述命令可以查看当中数据库此时有多少人正在链接,还有其他的信息都可以通过上述命令来查看: