目录
库
库的增删查改
字符集与校验集
库的备份与恢复
表
表的创建和删除
用不同的存储引擎创建表的区别
查看表
修改表
添加删除属性
修改改变属性
上篇博客我们讲了数据库的基本理解,对数据库有了一个大致的概念,下面我们来介绍一下库和表的基本操作
库
库的增删查改
增加库可用下面的语句
create database (if not exists) db_name;
其中括号中的句子可以不加,加上主要是为了安全
假如已经有了某个数据库,加上括号中的句子执行后是
如果要不加就会
当然我们知道create数据库本质就是在/var/lib/mysql目录下创建一个目录,那如果我们在/var/lib/mysql目录下创建一个目录其实查数据库时确实会变多,当然这样肯定是不合理的
删除库可用下面的语句
drop database db_name;
查询当前都有哪些数据库可以用下面的
show databases;
如果要改数据库,比如改数据库的字符集和校验集(下面会提到),就可以:
alter database test1 charset=gbk collate gbk_chinese_ci;
字符集与校验集
我们知道,内存和磁盘存储数据不可能存储一个字母或一个汉字,它存储的都是二进制,所以就需要把字符转成数字再去存储,那么把特定的字符转成什么数字呢?这就用到了不同的编码方式
创建数据库的时候,有两个编码集,
一个是数据库字符集:用于确定数据库未来如何存储数据(就是把数据变成什么码)
一个是数据库校验集:用于读取数据库时做字段的比较(就是把码变成什么数据)
所以数据库无论对数据做任何操作,都必须保证存储和取出时是编码一致的,这样才能保证存进去是什么,读出来还是什么
下面的指令可以输出数据库支持的所有字符集
show charset;
下面的指令可以输出数据库支持的所有校验集
show collation;
下面的指令可以输出数据库的字符集设置
show variables like 'character_set_database';
下面的指令可以输出数据库的校验集是什么
show variables like 'collation_database';
当然还可以用通配符来展示连接时,提供服务时用到的字符集和校验集
于是我们就可以指明字符集和校验集来创建数据库
下面我们就来看看相同字符集但是不同校验集对于最终结果会产生什么影响
我们先创建两个数据库test1和test2,它们的字符集都用utf8,但是test1的校验集用utf8_general_ci(不区分大小写),test2的校验集用utf8_bin(区分大小写)
然后对于两个数据库执行相同的操作:分别建立一张表并向表中插入aAbB四个字符
然后分别查询和排序,对于test1不区分大小写的结果是:
对于test2区分大小写的结果是:
有时候我们可能会忘记自己当前在那个数据库中正在操作,可以用下面的指令查看:
select database();
库的备份与恢复
我们可以在命令行中用下面的指令对于数据库进行备份
这里需要输入root登录mysql时的密码
其实这个.sql文件中存的就是当初创建数据库时的一些操作
如果备份的不是整个数据库,而是其中的一张表,可用下面的指令
mysqldump -u root -p 数据库名 表名1 表名2 > 路径
如果同时备份多个数据库
mysqldump -u root -p -B 数据库名1 数据库名2 > 路径
如果备份一个数据库时,没有加上-B参数,在恢复数据库时,需要先创建空数据库,然后再使用数据库,再用source来还原
其实不加-B就是.sql文件中没有创建数据库的操作
我们要恢复数据库可以:
如果要查看当前数据库正在执行哪些线程,可用
show processlist;
表
表的创建和删除
当我们创建完一个数据库之后,就是在数据库中创建各种各样的表,下面我们来简单的创建一个表:
if not exists跟上面创建库的作用是一样的,下面写表的成员时成员名放前面,类型放后面。后面的comment是对于前面表成员的解释,也可以说是描述。最后一行不一定非要指明字符集、校验集和存储引擎,因为这些内容是有默认的选择的
删除表非常简单
drop table table_name;
用不同的存储引擎创建表的区别
并且我们要知道,不同的存储引擎创建的表的文件类型和数量也是不同的,比如指定MyIsam创建的表会在/var/lib/mysql/db_name下创建如下的文件
其实.MYD的D就是指data,证明这里面存的是数据信息
.MYI的I就是指index,证明这里面存的是索引信息
如果指定InnoDB时会创建如下的文件
这里.ibd的i就是index,d就是data,证明这种存储引擎把数据和索引信息存到了一个文件中,这也更能体现不同存储引擎之间的差别
查看表
如何查看当前数据库下都有哪些表呢?
可以用show tables;
但是首先要保证我们确实在某个数据库里面
可以用下面的指令来看看这个表中都有哪些字段呢
如果要更详细的展示当时创建这个表时的详细信息,可以
show create table table_name;
但是这样看起来是非常乱的,可以把;改为\G
show create table table_name \G
这里面和我们当时创建表时写的内容明显不完全一样,那是因为mysqld会对我们的语句做优化成标准的语句存起来,所以会对我们的语句做修改
修改表
修改表的名字非常简单
alter table old_name rename to new_name;
下面可以修改表的内容,比如向表中插入数据
红框内的可加可不加,因为不加默认就是向每个属性值中依次添加内容
添加删除属性
比如要给用户再添加一个属性,比如性别gender,可以像下面这样
要指定添加的属性名称,类型和位置
如果要删除属性也很简单,直接
修改改变属性
如果要改变某个属性的类型,用modify,比如把name 的varchar(20)改为varchar(60),可以
可以看到修改之后之前的comment也就没了,所以这是一种覆盖式的修改
如果要直接改变某个属性,要用change
并且要加上要修改成的类型,要不然没法确定类型