目录
一、数据库:
1、查看数据库:
2、创建数据库:
3、删除数据库:
4、数据库的编码问题:
5、校验规则对数据库的影响:
6、修改数据库:
7、库的备份与恢复:
8、查看链接情况:
二、表的操作:
1、创建表:
2、查看表:
3、修改表:
插入数据:
修改表名:
增加字段属性:
编辑
修改字段的数据类型:
修改字段的名称:
删除某一字段:
表的删除和备份:
删除表:
一、数据库:
1、查看数据库:
首先,在创建数据库之前,要先查看当前有哪些数据库:
show databases;
这些本质是在Linux中,/var/lib/mysql目录下创建的目录
当创建了很多数据库,我们无法知道是正在使用哪一个数据库的,使用需要用SQL语句
select database();
这样,在use后,使用SQL语句就能够查看当前正在使用哪一个数据库了
如何知道创建数据库时的详细信息:
show create database 数据库名;
理解:
test1创建时,可以看到关键字是大写的,可以这样也可以不这样
数据库的名字是用引号引起来了,是为了和关键字区分
后面/**/不是注释,其表示当MySQL版本大于4.1.00的时候,执行其后面SQL语句,当MySQL版本大于8.0.16的时,执行其后面的语句
2、创建数据库:
使用SQL语句:
create database [if not exists] 数据库名;
如果创建重复名的数据库,就会出错,可以加上if not exists选项,它的意思是如果不存在数据库就创建
当我们加上这个选项后,可以发现没有error了,取而代之的是warning
3、删除数据库:
使用SQL语句:
drop database 数据库名;
删除数据库在Linux下的体现就是删除对应路径下的目录
如果删除不存在的数据库是会报错的,如果想让这个报错改为警告可以加上if exists
注意:
一般不要轻易删除数据库,毕竟这里和Linux中删除目录差不多,如果删除,里面的所有数据就都没了
4、数据库的编码问题:
在系统创建的时候,有两个编码集合,字符集和校验集
字符集
字符集表示数据库的内容写的时候采用的编码,用于规定未来存储时的编码格式
查看MySQL中默认的字符集用SQL语句:
show variables like 'character_set_database';
查看MySQL支持的所有字符集:
使用SQL语句:
show charset;
校验集
校验集表示在已经有数据,进行读的时候以特定的方式去读,对读到的数据做特定的解释,规定数据查询时的校验规则
查看MySQL中默认的校验集用SQL语句:
show variables like 'collation_database';
查看MySQL支持的所有字符集:
show conllation;
使用SQL语句:(有很长,这里只截取部分)
使用指定编码创建数据库
// 设置字符集
create database 数据库名称 [charset=字符集 || character set 字符集];
// 设置校验集
create database 数据库名称 charset=utf8mb4 collate 校验集;
5、校验规则对数据库的影响:
首先,我们要知道:表是继承其所在数据库的编码格式的
那么,我们创建两个数据库,分别用不同的校验规则:其中一个是区分大小写的,一个是不区分大小写的
//不区分大小写
create database test1 collation utf8_general_ci;
//区分大小写
create database test2 collate utf8_bin;
接着,分别在里面创建一张表,并且在表中插入大写和小写的a
其中test1是不区分大小写的,test2是区分大小写的
在插入后,直接查找表中对应的a,
select * from testtable where id='a';
我们应该会发现:如果是test1的话,查找a会出现a和A;如果是test2的话,查找a只是出现a
如上,结果如期
6、修改数据库:
修改数据库编码格式:
使用指令:
alter databas 数据库名 charset=修改后的字符规则 COLLATE=修改后的校验规则
如将test1进行的字符编码规则和字符校验规则进行修改
alter database test1 charset=gbk collate gbk_chinese__ci;
7、库的备份与恢复:
备份:
将一个数据库进行备份采用SQL语句:
mysqldump -P端口号 -u用户名 -p 密码 -B 数据库名1 数据库名2 ... > 数据库备份存储的文件路径
接下来举个例子:
mysqldump -P3306 -uroot -p -B test1 > test.sql
如上,这就是对我们的test1数据库进行备份了,对这个文件进行查看,我们可以知道其是备份了我们的SQL语句和数据
恢复:
恢复的话是在MySQL客户端中,用SQL语句:
source 数据库备份存储的文件路径;
我们已经把test1数据库备份好了,那么我们接下来将这个test1数据库删了,然后在恢复:
然后在执行SQL语句进行数据库的恢复
source /home/silence/MySQL/test.sql;
这样,我们的test1数据库就恢复了(包括里面的表)
也可以只备份表
mysqldump -u root -p -P 端口 数据库名 表名 > 目标路径(含文件)
8、查看链接情况:
MySQL支持多用户的访问,也可能会被恶意访问,可以通过如下SQL语句进行查看MySQL语句的链接
show processlist;
二、表的操作:
创建表是在数据库中创建的,所以在进行表的创建的时候,要先use数据库表示进入对应数据库
1、创建表:
我们创建表的SQL语句是:
create table [if not exists] 表名(成员名1 成员类型1 [comment '注释信息'],成员名2 成员类型2 [comment '注释信息'],成员名3 成员类型3 [comment '注释信息']
)[charset=字符编码] [collate=校验规则] [engine=引擎名];
以上comment和其注释信息是可以忽略的,并且下面的charset,collate,engine也是可以不写的,如果不写的话就为系统默认
这里采用MyIsam引擎
这里采用InnoDB引擎
当创建成功后,发现person1和person2在Linux下,显示的目录是不一样的,现在我只需要知道不同的引擎在Linux下的显示是不一样的,在后面的MySQL索引在讲解
2、查看表:
查看表之前要在数据库中,所以要先保证在数据库中,然后在进行表的查看
SQL语句:
show tables;
这是进行表的查看,表示当前数据库中有哪些表
desc 表名;
这个SQL语句是查看表的详细信息
- Field表示列名
- Type表示类型
- Null表示是否可为空
- Key表示是否存在 主键/外键/唯一键 约束
- Default表示是否有默认值
- Extra表示额外信息
如果想看建表时的信息,创建表的时候更详细的信息,比如所采用的字符编码或者校验码或者所使用的引擎,那就需要使用:
show create table 表名 \G
3、修改表:
插入数据:
在修改前,表中需要有数据,那么首先我们向我们的表中插入数据
insert into 表名 [(字段1,字段2, ...)] values (数据1,数据2, ... 要和前面对应);
其中,如果属性名不写就是默认所有的
如下,这里插入两行数据
创建成功后可以使用SQL语句来查看
select * from 表名;
修改表名:
SQL语句:
alter table 原表名称 rename [to] 修改后的表名称;
如下,当我们对表名进行修改后,再进行查看,发现修改成功
增加字段属性:
如上,原本有3个字段属性,并且在查看创建的时候能够看到我们给每一个字段属性的备注
接下来增加字段属性:
用SQL语句:
alter table 表名 add 字段名称 数据类型 备注;
这样就能够通过show命令查看到了增加的字段以及备注了
并且在表中的数据也会增加,由于我们没有插入数据,所以是空
在SQL语句中,最后面还可以增加after 字段属性表示将数据增加到对应字段属性后
alter table 表名 add 字段名称 数据类型 备注 after 字段属性;
如果想插在第一行,将after和其后面的字段属性换成not null first
修改字段的数据类型:
就是修改上述的Type用到SQL语句:
alter table 表名 modify 待修改字段名 新的数据类型 备注;
实际上,这是覆盖式的修改的,并不是只将数据类型修改
如上,这里修改的时候没有加上对应的备注,在修改后查看发现原来的备注没有的,证明这里是覆盖式的修改的
修改字段的名称:
用SQL语句:
alter table 表名 change 原字段名 修改后字段名 数据类型 备注;
如下是将birth改为birthday,这里也是覆盖修改的,如下我没有加备注,当再次看的时候也没有了,当然也可以自己重新定义
并且类型也是重新定义的
删除某一字段:
alter table 表名 drop 字段名称;
将ages删除
表的删除和备份:
因为表的删除是不可逆的,所以,在删除表之前最好做一下备份
mysqldump -P 端口号 -u用户名 -p 数据库名 表名1 表名2 ... > 表备份存储的文件路径
将表备份并存储在当前目录下:
恢复:
source 表备份存储的文件路径
当恢复后就都回来了
删除表:
drop table 表名称;
当删除后就没了
这是很危险的,当删除表后期所有数据都没了,在开发中不要轻易删除