1. 操作資料庫 C(Create 創建) R(Retrieve 查詢) U(Update 更新) D(Delete 刪除) (1) 查詢資料庫 1) 查詢所有資料庫名稱 這裡有一個註意的東西,一個Database對應數據目錄中的一個實體文件夾,但是 information_schema 這個資料庫 ...
1. 操作資料庫
C(Create 創建) R(Retrieve 查詢) U(Update 更新) D(Delete 刪除)
(1) 查詢資料庫
1) 查詢所有資料庫名稱
SHOW DATABASES;
這裡有一個註意的東西,一個Database對應數據目錄中的一個實體文件夾,但是 information_schema 這個資料庫卻沒有實體對應。它的用途是作為視圖使用,描述資料庫的表的信息、庫的名稱等等。
2) 查詢創建資料庫的創建語句和字元集
SHOW CREATE DATABASE 資料庫名;
雖然已經修改了資料庫的預設編碼方式為utf8mb4,但是已創建的資料庫還是utf8。而這個mysql資料庫則是Latin1,雖然也支持中文,但是最好還是改為utf8mb4。
(2) 創建資料庫
1) 創建一個資料庫
CREATE DATABASE 資料庫名;
2) 帶判斷語句的創建資料庫
CREATE DATABASE IF NOT EXISTS 資料庫名;
-- 如果不存在資料庫則創建,如果存在則不創建,不過是否創建了資料庫都會返回Query OK
3) 創建指定字元集的資料庫
CREATE DATABASE 資料庫名 CHARACTER SET 字元集;
(3) 修改資料庫
1) 修改資料庫字元集
ALTER DATABASE 資料庫名 CHARACTER SET 字元集 COLLATE 排序規則;
這裡註意一下,修改字元集的時候最好要修改一下排序規則。而utf8mb4中有兩種排序規則,一個是 utf8mb4_general_ci 一個是 utf8mb4_unicode_ci。因為utf8mb4_unicode_ci 的排序更精確一些,所以推薦使用 utf8mb4_unicode_ci 排序方式。
(4) 刪除資料庫
1) 直接刪除(非常危險,儘量不要使用)
DROP DATABASE 資料庫名;
2) 帶判斷的刪除(以防引起錯誤)
DROP DATABASE IF EXISTS 資料庫名;
(5) 使用資料庫
1) 查詢當前使用中的資料庫
SELECT DATABASE();
2) 進入資料庫
USE 資料庫名();
進入資料庫以後如果想切換其他資料庫,直接使用 USE 命令就可以。
2. 操作表
(1)查詢表
1)查詢資料庫中有哪些表
SHOW TABLES;
2) 查詢表結構
DESC 表名;
3) 查詢表的字元集
SHOW CREATE TABLE 表名;
(2) 創建表
1) 創建基礎表
CREATE TABLE 表名(
列名 數據類型,
列名 數據類型,
列名 數據類型
);
2) 創建一個已有表結構相同的表
CREATE TABLE 新表名 LIKE 舊表名;
(3) 刪除表
1) 直接刪除
DROP TABLE 表名;
2) 帶判斷的刪除
DROP TABLE IF EXISTS 表名;
(4) 修改表
1) 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
2) 修改表字元集
ALTER TABLE 表名 CONVERT TO CHARACTER SET 字元集 COLLATE 排序規則;
3) 添加列
ALTER TABLE 表名 ADD 列名 數據類型;
4) 修改列名和數據類型
ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
5) 修改列的數據類型
ALTER TABLE 表名 MODIFY 列名 新數據類型;
6) 刪除列
ALTER TABLE 表名 DROP 列名;
3. 約束
約束是對錶進行限定,保證數據的正確性、完整性和有效性。
(1) 非空約束(NOT NULL)
保證列數據增、刪、改時不能為NULL空值。
CREATE TABLE 表名(列名 數據類型 NOT NULL,列名 數據類型 NOT NULL);-- 建表時限定
ALTER TABLE 表名 MODIFY 列名 數據類型 NOT NULL; -- 現有表修改列為非空
ALTER TABLE 表名 MODIFY 列名 數據類型; -- 刪除非空限定
(2) 唯一約束(UNIQUE)
保證一列中的每個數據都是唯一的,不可重覆。
註意:唯一約束不能保證NULL值唯一;現有表設置唯一約束列時,列中不可有重覆數據。
CREATE TABLE 表名(列名 數據類型 NOT NULL,列名 數據類型 UNIQUE);-- 建表時添加唯一約束
ALTER TABLE 表名 MODIFY 列名 數據類型 NOT NULL; -- 現有表修改列為唯一約束
ALTER TABLE 表名 DROP INDEX 列名; -- 刪除列的索引,就刪除了唯一約束
(3) 主鍵約束(PRIMARY KEY)
限定了列的數據非空且唯一;一張表中只能有一個列是主鍵,是表中的唯一標識。
註意:現有表設置主鍵約束列時,列中不可有重覆數據。
CREATE TABLE 表名(列名 數據類型 NOT NULL,列名 數據類型 PRIMARY KEY); /*
建表時添加主鍵約束 */
ALTER TABLE 表名 MODIFY 列名 數據類型 PRIMARY KEY; -- 現有表修改列為主鍵約束
ALTER TABLE 表名 DROP PRIMARY KEY; -- 刪除表的主鍵,就刪除了列的主鍵約束
(4) 自動增長(AUTO_INCREMENT)
在某一數值類型列使用,可以完成值的自動增長,也可手動設值。一般配合主鍵使用。
註意:自動增長是跟隨上一條數據的數值進行自動增長。如果一條數據都沒有,則會從 1 開始。
CREATE TABLE 表名(列名 數據類型 PRIMARY KEY AUTO_INCREMENT); /*
建表時添加主鍵約束和自動增長 */
ALTER TABLE 表名 MODIFY 列名 數據類型 AUTO_INCREMENT; -- 現有表修改為增加自動增長
ALTER TABLE 表名 MODIFY 列名 數據類型; -- 刪除列的自動增長,但不刪除主鍵約束
(5) 外鍵約束(FOREIGN KEY)
將兩個表的產生關聯關係,防止誤操作,便於查詢,保證數據有效、正確、完整。
外鍵對應主表的主鍵,故外鍵應設置到從表上,而且需要先建立主表再建立從表。
主鍵和外鍵的關係是一對多,比如主鍵是部門表編號,外鍵就是員工表中的部門編號。
註意:根據現有表創建外鍵約束,需要滿足約束要求,把從表的一列作為外鍵,和主鍵匹配。
除NULL空值以外,如果外鍵有主鍵沒有的數據,就無法創建或者修改。
CREATE TABLE 從表名(外鍵 數據類型,CONSTRAINT 外鍵名 FOREIGN KEY (外鍵)
REFERENCES 主表名(主表列名)); /* 創建表時創建關聯 */ ALTER TABLE 從表名 DROP FOREIGN KEY 外鍵名; -- 刪除外鍵 ALTER TABLE 從表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (外鍵) REFERENCES 主表名(主表列名); /* 現有從表創建關聯 */
(6) 級聯
將兩個通過外鍵約束的表,一次性修改兩個表的主鍵和外鍵數據。
級聯更新是主鍵數據修改時,外鍵跟著修改;級聯刪除是主鍵數據刪除,外鍵數據跟著刪除。
註意:級聯雖然很方便,但是效率低、風險大,在大系統中使用這兩種級聯要慎重。
ALTER TABLE 從表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (外鍵) REFERENCES 主表名(主表列名)
ON UPDATE CASCADE; /* 現有從表創建關聯並且設置級聯更新 */
ALTER TABLE 從表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (外鍵) REFERENCES 主表名(主表列名)
ON UPDATE CASCADE ON DELETE CASCADE; /* 現有從表創建關聯並且設置級聯更新和級聯刪除 */