海到无边天作岸
山登绝顶我为峰
一、数据库的创建、修改与删除
1.1 引言
在经过前面七天对于MySQL基本知识的学习之后,现在我们从基本的语句命令开始进入综合性的语句的编写来实现特定的需求,从这里开始需要我们有一个宏观的思想,来俯瞰SQL命令

1.2 创建数据库
创建数据库是所有命令开始,而创建数据库我们有三种方法
方式1:
CREATE DATABASE The_First
方式2:
# 指定一个特定的字符集,你可以使用 CREATE DATABASE 语句,并使用 CHARACTER SET 选项来指定字符集。
CREATE DATABASE The_First_2 CHARACTER SET utf8mb4
方式3:
#创建一个数据库,如果它存在,则创建失败,但是不报错
CREATE DATABASE IF NOT EXISTS The_First CHARACTER SET 'gbk'
1.3 管理数据库
通过 SHOW DATABASES 来实现对全部数据库和指定数据库的查询和显示
查看所有数据库信息
SHOW DATABASES
查看指定数据库信息
SHOW CREATE DATABASE The_first


通过 USE 来实现数据库的切换,并使用 SHOW TABLES 查看当前数据库中保存的数据表,以及通过 SELECT DATABASE() 语句来查看当下使用的数据库是哪一个
# 切换数据库
USE mysql
# 查看当前数据库中保存的数据表
SHOW TABLES
# 查看当前使用的数据库
SELECT DATABASE()
FROM DUAL;
# 查看指定数据库下保存的数据表
SHOW TABLES FROM mysql




1.4 修改数据库
当数据库建立好之后,我们可能会需要对其中的信息进行修改,比如:更改数据库字符集
SHOW CREATE DATABASE the_first
ALTER DATABASE the_first CHARACTER SET 'gbk'


小发现: 在我的电脑上可以,不知道在你的上面是否可行,但是不要轻易尝试;reset master 清楚日志缓存,然后重新建立刚刚被删除的表,已保存的数据就恢复,这是在我的电脑上可以实现的;具体原理我现在还无法理解
二、表的创建、修改、查询
2.1 如何创建表
当你想要创建一个表时,一定要指明是在哪个数据库创建的表
注意:
(1)如果创建表时没有明确指明使用的字符集,则默认最近使用的字符集
(2)使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度
(3)用户需要具备管理员权限
方式1:
CREATE TABLE IF NOT EXISTS departments(
id INT,
name VARCHAR (255),
hire_data DATE
);
# 查看表结构
DESC departments
方式2:基于现有的表创建新的表
CREATE TABLE the_first_3
AS
SELECT id,name
FROM departments;
SELECT *
FROM the_first_3
补充:查询字段中的别名可以作为新创建的表的字段的名称
CREATE TABLE the_first_4
AS
SELECT e.id '工号',e.name '姓名',t.position '职位'
FROM departments e JOIN department_position t
ON e.id = t.id
SELECT *
FROM the_first_4
DESC the_first_4
练习:
创建一个表emp1,实现对 departments表的复制,但不包含表数据
CREATE TABLE emp1
SELECT *
FROM departments
LIMIT 0;
2.2 修改表
通过 ALTER TABLE 来实现对表的修改,以及通过DESC 来实现表的显示
DESC the_first_4;

2.2.1 添加一个字段
如果不加以说明,那么默认添加到最后一个字段
# 添加一个字段
ALTER TABLE the_first_4
ADD salary DOUBLE (10,2)
# 指定添加位置
ALTER TABLE the_first_4
ADD phone_number VARCHAR(12) FIRST
2.2.2 添加字段到指定位置
补充:列名不能用单引号进行引用
ALTER TABLE the_first_4
ADD email VARCHAR(45) AFTER 姓名;
2.3 修改一个字段: 数据类型、长度
一般不会对数据类型进行修改,因为大概率会导致出错,不过我们通常会对长度进行修改
# 修改长度
ALTER TABLE the_first_4
MODIFY `姓名` VARCHAR(300);
DESC the_first_4;
修改默认值:如果没有输入值,那么就默认为 NO,对于在修改前插入的没有影响
ALTER TABLE the_first_4
MODIFY salary VARCHAR(100) DEFAULT 'NO';
DESC the_first_4;
SELECT *
FROM the_first_4
2.4 重命名和删除
重命名和删除既可以用于字段也可以用于表等
# 重命名一个字段
ALTER TABLE the_first_4
CHANGE salary month_salary DOUBLE(10,2);
SELECT *
FROM the_first_4;
# 删除一个字段
ALTER TABLE the_first_4
DROP phone_number
# 或 DROP COLUMN phone_number
SELECT *
FROM the_first_4;
对于重命名表和重命名字段的区别基本相同,而删除表会将表的结构和数据全部都删除掉,清空表是清空表中的所有数据,但是表结构保留,代码在下面,大家可以自行尝试
# 重命名表
# 方式1:
RENAME TABLE the_first_4
TO the_first_one
# 方式2:
ALTER TABLE the_first_one
RENAME TO the_first_4
# 删除表
# 将表的结构和数据全部都删除掉
DROP TABLE the_first_3
# 清空表
# 清空表中的所有数据,但是表结构保留
CREATE TABLE the_first_3
AS
SELECT id,`name`
FROM departments
TRUNCATE TABLE the_first_3
SELECT * FROM the_first_3
三、DCL中的 COMMIT 和 ROLLBACK
3.1 注意:
(1) COMMIT: 提交数据,一旦执行之后,数据就被永久的保存到数据库之中,并且数据不能被回滚(撤销)
(2) ROLLBACK:执行回滚操作,执行之后可以实现数据的回滚,回滚到最近的 COMMIT操作
3.2 补充:对比 TRUNCATE TABLE 和 DELETE FROM
(1) 相同点:都可以实现对表中所有数据的删除,同时保留表结构。
(2) 不同点:TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
(3) DELETE FROM: 一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚
3.3 DDL 和 DML 的说明
(1) DDL的操作一旦执行,就不可回滚。指令SET autocommit=FALSE对DDL操作失效。因为在执行完DDL之后,一定会进行一次COMMIT,所以无法回滚
(2) DML的操作默认情况,一旦执行,也是不可回滚的。但是,如果在执行DML之前,执行了 SET autocommit = FALSE ,则执行的DML操作就可以实现回滚。
# 演示:
CREATE TABLE the_first_2
AS
SELECT *
FROM the_first_4
1.
COMMIT;
2.
SELECT *
FROM the_first_2
3.
SET autocommit = FALSE;
4.
DELETE FROM the_first_2
5.
SELECT *
FROM the_first_2
6.
ROLLBACK;
7.
SELECT *
FROM the_first_2
# TRUNCATE
CREATE TABLE the_first_1
AS
SELECT *
FROM the_first_4
1.
COMMIT; # 保存
2.
SELECT *
FROM the_first_1
3.
SET autocommit = FALSE;
4.
TRUNCATE TABLE the_first_1
5.
SELECT *
FROM the_first_1
6.
ROLLBACK;
7.
SELECT *
FROM the_first_1
# TRUNCATE 无法恢复之前的数据
3.4 DDL 原子化
CREATE DATABASE the
USE the
CREATE TABLE book(
id INT,
`name` VARCHAR(255)
);
SHOW TABLES
3.5 小结
因为book1 不存在,所以无法执行,这个语句可以看作是一个事务,如果不能贯彻完成,那么就撤销语句中对已经完成的操作,例:
DROP TABLE book,book1;
SHOW TABLES
四、拓展补充
五、结语
若你渴望一首春日的诗,不妨听听《春暖花开》的旋律:「生命如水有时平静,也有时澎湃,穿越阴霾,阳光洒满你窗台」
须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!