目录
1、库的操作
1.1、库的查看
1.1.1、查看库
语法如下:
sql
show databases;
结果如下图所示:

1.1.2、查看建库语句
语法如下:
sql
show create database 数据库名;
使用上面的命令可以查看数据库创建时的语句。
1.2、库的创建
1.2.1、默认编码创建
语法如下:
sql
create database [if not exists] 数据库名;
其中\[\] 表示可选项,其中if not exists表示如果不存在则创建,如果存在则不创建。
例如:创建一个hello数据库

1.2.2、指明编码创建
创建数据库的时候,有两个编码集:分别是数据库编码集 (数据库存储所采用的编码集)和数据库校验集(数据库进行字段比较所使用的编码,本质也是一种读取数据库中数据所采用的解码格式)。这两个编码所采用的规则应当是一致的。
可以使用如下方式查看数据库的编码集:
sql
show variables like 'character_set_database';
例如:

可以使用如下方式查看数据库的校验集:
sql
show variables like 'collation_database';
例如:

可以使用如下命令查看数据库支持的编码集:
sql
show charset;
可以使用如下命令查看数据库支持的校验集:
sql
show collation;
创建数据库的时候可以指明编码集和校验集,这样的话就不使用默认的编码集和校验集了。
语法规则如下:
sql
create database [if not exists] 数据库名 [charset=编码集] [collate=校验集];
也可以使用下面的语法,两者是一样的,如下:
sql
create database [if not exists] 数据库名 [character set 编码集] [collate 校验集];
例如:创建数据库的时候可以指明编码集和校验集

注:这个警告是因为使用了MySQL不推荐的utf8编码集和对应的校验规则导致的,它推荐使用utf8mb3这个编码集和对应的校验规则。
再比如:

1.2.3、编码规则对库的影响
例如:创建一个数据库test1
sql
create database test1 character set utf8 collate utf8_general_ci;
再创建一个数据库test2
sql
create database test2 character set utf8 collate utf8_bin;
这两个校验规则的区别是一个区分大小写,另一个是不区分大小写的。下面我们就来看看校验规则的差异将导致什么结果,下面的有些操作不属于库的操作,而是后面的内容。
想要操作一个数据库,先要use这个数据库,如下:
sql
use test1;
依次执行如下命令:
sql
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');
我们可以使用如下命令查看表中插入的内容:
sql
select * from person where name='a';
结果为:

我们可以看到a和A都被查出来了,因此该校验规则是不区分大小写的。
再使用另一个数据库,如下:
sql
use test2;
依次执行如下命令:
sql
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');
使用同样的查找命令如下:
sql
select * from person where name='a';
结果为:

从结果可以看出,该校验规则是区分大小写的。
可以使用如下命令查看当前选择哪一个数据库,如下:
sql
select database();
结果为:

注:一般使用默认的编码集和校验集即可,不需要指明编码集和校验集。在MySQL中可以使用system clear来清理屏。
1.3、库的删除
语法如下:
sql
drop database [if exists] 数据库名;
注意:不要随意删除数据库。
1.4、库的修改
对数据库的修改主要指的是修改数据库的编码集,校验集。
语法:
sql
alter database 数据库名 [charset=编码集] [collate=校验集];
还有另一种写法也是可以的,如下:
sql
alter database 数据库名 [character set 编码集] [collate 校验集];
例如:修改之前创建的test2这个数据库

查看test2这个库的创建命令,如下:

1.5、备份与恢复
1.5.1、备份
语法如下:
sql
mysqldump -P 端口号 -u 用户 -p密码 -B 数据库名 > 备份存放路径
注意:上面的这个命令是在命令行中执行的,不是在mysql里面执行的。
例如:把上面的test2数据库给备份到当前目录。
sql
mysqldump -P3306 -u root -p -B test2 > test.sql
我们可以打开这个备份的文件看一下,如下图所示:

1.5.2、恢复
语法如下:
sql
source 数据库路径;
注意:上面的命令是在mysql中执行的。
先把数据库中的test2给删除掉,然后再利用之前备份的test2,进行恢复,恢复命令如下:
sql
source /home/ubuntu/test2.sql
执行完上面的命令后就可以看到数据库已经被恢复了。
注:如果备份的不是整个库,而是其中的一些表还是使用mysqldump命令,如下:
sql
mysqldump -u root -p 数据库名 表名1 表名2 ... > 备份存放路径
也可以同时备份多个数据库,如下:
sql
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 备份存放路径
如果备份一个数据库时,没有带上-B参数,在恢复数据库时,需要先创建空数据库,然后use数据库,再使用source来还原。
1.6、查看连接情况
语法如下:
sql
show processlist;
可以告诉我们当前有哪些用户连接到MySQL,如果查出某个用户不是你正常登陆的,很有可能你 的数据库被人入侵了。
2、表的操作
2.1、表的创建
语法如下:
sql
create table [if not exists] 表名 (
列1 类型,
列2 类型,
....
列n 类型
) [character set 字符集] [collate 校验规则] [engine 存储引擎];
也可以使用如下方式:
sql
create table [if not exists] 表名 (
列1 类型,
列2 类型,
....
列n 类型
) [charset=字符集] [collate=校验规则] [engine=存储引擎];
注:如果没有指定字符集,则以所在数据库的字符集为准;如果没有指定校验规则,则以所在数据库的校验规则为准。
例如:创建一个表叫user1
sql
create table if not exists user1(
id int,
name varchar(20) comment '用户名',
password char(32) comment '用户密码',
birthday date comment '用户生日'
)character set utf8 collate utf8_general_ci engine MyISAM;
结果如下:

注:其中的comment表示对该列的注释。
例如:再创建一个表叫user2
sql
create table if not exists user2(
-> id int,
-> name varchar(20) comment '用户名',
-> password char(32) comment '用户密码',
-> birthday date comment '用户生日'
-> )charset=utf8 collate utf8_general_ci engine InnoDB;
结果为:

注:不同的存储引擎,创建的表所对应的表的文件是不一样的,MyISAM引擎是把数据和索引分开存放的,InnoDB引擎是把数据和索引放在一起的,关于索引后面说。
2.2、表的查看
2.2.1、查看表
语法如下:查看数据库中的表
sql
show tables;
结果如下:

2.2.2、查看表结构
语法如下:查看表的结构
sql
desc 表名;
例如:

其中第一列是字段名,第二列是字段类型,其他的后面再说。
2.2.3、查看建表语句
语法如下:查看建表语句
sql
show create table 表名;
例如:

注:还可以使用下面的方式,这种方式显示的信息更加简洁,如下:
sql
show create table user1 \G
结果为:

2.3、修改表
在项目实际开发中,修改某个表的结构,比如:字段名字、字段类型,此外添加字段,删除字段等等,就需要修改表。
2.3.1、修改表名
语法如下:
sql
alter table 原表名 rename [to] 新表名;
例如:修改表名,把表user1改为user
sql
alter table user1 rename to user;
结果为:

2.3.2、添加列
语法如下:
sql
alter table 表名 add 列名 列类型;
向表user中插入一些信息,方便下面进行演示,如下:

例如:在user表添加一列,用于保存图片路径。
sql
alter table user add image_path varchar(128) comment '图片路径' after birthday;
其中after birthday表示新增的这一列放在birthday这一列后面。
结果为:

2.3.3、修改列类型
语法:
sql
alter table 表名 modify 列名 新类型;
例如:修改name的类型,将其长度改成60。
sql
alter table user modify name varchar(60);
结果为:

注:这个修改本质上是覆盖式的修改。
2.3.4、删除列
语法如下:
sql
alter table 表名 drop 列名;
例如:删除password列,删除字段一定要小心,删除字段会导致对应的列数据都没了。
sql
alter table user drop password;
结果为:

另外我们也可以看到对应的插入信息也没有了,如下:

2.3.5、修改列名称
语法如下:
sql
alter table 表名 change 原列名称 新列名称 新列类型;
例如:修改name列的列名称,改为xingming
sql
alter table user change name xingming varchar(60);
结果为:

2.4、删除表
语法如下:
sql
drop table [if exists] 表名;
例如:

注:轻易不要修改表结构和删除表。