海到無邊天作岸? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?山登絕頂我為峰
一、數據庫的創建、修改與刪除
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.idSELECT *
FROM the_first_4DESC 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 departmentsTRUNCATE 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
四、拓展補充
五、結語
????????若你渴望一首春日的詩,不妨聽聽《春暖花開》的旋律:「生命如水有時平靜,也有時澎湃,穿越陰霾,陽光灑滿你窗臺」?
須知少日拏云志,曾許人間第一流。我們還年輕,我們還有無限可能!