最近自學SQL,買了《SQL學習指南》作爲參考書。書中主要篇幅都在SQL數據語句上,而對方案語句(CREATE\DROP\ALTER)的描述相當簡略,ALTER更是一筆帶過。於是搜索資料做了個總結,若有遺漏,懇請補充。
增刪列
以一個名爲person的表爲例(下同),
ALTER TABLE person ADD name VARCHAR(20);
ALTER TABLE person DROP COLUMN name; -- or 'DROP name'
修改列類型
ALTER TABLE person MODIFY name VARCHAR(30);
ALTER TABLE person CHANGE name new_name VARCHAR(30);
重命名列/表
#重命名列
ALTER TABLE person CHANGE name new_name VARCHAR(30);
#重命名錶
ALTER TABLE person RENAME TO new_person;-- or 'RENAME new_person'
增/刪約束
主鍵約束
-
添加
#單獨添加 ALTER TABLE person ADD PRIMARY KEY(name); ALTER TABLE person ADD CONSTRAINT pk_person PRIMARY KEY(name); #在修改列類型時添加 ALTER TABLE person MODIFY name varchar(30) PRIMARY KEY; ALTER TABLE person CHANGE name name varchar(30) PRIMARY KEY;
-
刪除
ALTER TABLE person DROP PRIMARY KEY;
唯一性約束
-
添加
#單獨添加 ALTER TABLE person ADD UNIQUE(name); ALTER TABLE person ADD UNIQUE KEY(name); ALTER TABLE person ADD CONSTRAINT pk_person UNIQUE(name); ALTER TABLE person ADD CONSTRAINT pk_person UNIQUE KEY(name); #修改列類型時添加 ALTER TABLE person MODIFY name varchar(30) UNIQUE; ALTER TABLE person CHANGE name name varchar(30) UNIQUE;
-
刪除
ALTER TABLE person DROP INDEX name;
外鍵約束
假設有另一張表favorite_food,以person中的name爲外鍵。
-
添加
ALTER TABLE favorite_food ADD FOREIGN KEY(name) REFERENCES person(name); ALTER TABLE favorite_food ADD CONSTRAINT fk_person_food FOREIGN KEY(name) REFERENCES person(name);
-
刪除
ALTER TABLE favorite_food DROP FOREIGN KEY fk_person_food; #可用 SHOW CREATE TABLE favorite_food 查詢外鍵約束名
非空約束
-
添加
ALTER TABLE person MODIFY name VARCHAR(30) NOT NULL; ALTER TABLE person CHANGE name name VARCHAR(30) NOT NULL;
-
刪除
= 添加默認值約束
默認值約束
在增加列或修改列類型時若未指定默認值,則會默認爲NULL。可據此消除非空約束。若要指定默認值:
ALTER TABLE person MODIFY name VARCHAR(30) DEFAULT 'Denny';
ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT 'Denny';
其他像自增約束、零填充約束的增加和刪除格式與非空約束相同。
檢查約束
注:在MySQL-8.0.16前CHECK約束會被忽略。
-
添加
ALTER TABLE person ADD CONSTRAINT ck_person CHECK(id <5);
-
刪除
ALTER TABLE person DROP CONSTRAINT ck_person;