最近自学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;