约束用于限制加入表的数据的类型。可以在创建表时添加约束也可以在修改表时添加或移除约束。
-
PRIMARY KEY
: 为表添加主键,主键默认不为NULL,添加主键会自动添加主键索引(索引名称为PRIMARY)。 -
FOREIGN KEY
: 为表添加外键,好处:用于预防破坏表之间连接的动作,也能防止非发数据插入外键列因为他必须是它指向的那个表中的值。添加外键会为表添加一个聚集索引 -
UNIQUE
: 为表中的一列或者多列添加唯一性约束,添加unique约束会自动增加唯一性索引(索引名称默认为tuple中的第一个列) -
NOT NULL
: 强制列不接受NULL值,插入或更新时为NULL则更新失败 -
DEFAULT
: 给数据库的某列指定默认值,默认为NULL。 -
AUTO_INCREMENT
: 为主键添加自动递增约束,这样会在插入新记录时即使不指定该列的值也会生成一个唯一的数字,而不是使用默认值代替,默认从1开始
# 创建表时添加约束
CREATE TABLE users(
id int PRIMARY KEY AUTO_INCREMENT, # id列插入数据时自动递增,而不是使用默认值
age int DEAFULT 20, # default约束
name varchar(25),
user_id int FOREIGN KEY REFERENCES users(id) # 外键约束,不指定约束名
UNIQUE (name) # unique约束,不指定约束名
)
CREATE TABLE users(
id int,
age int,
user_id int,
PRIMARY KEY (id), # 主键约束,不指定约束名
FOREIGN KEY (user_id) REFERENCES users(id) # 外键约束,不指定约束名
CONSTRAINT index_age UNIQUE (age) # 唯一约束名称,并指定约束名
)
# 修改表:添加或移除PRIMARY KEY约束
ALTER TABLE ADD PRIMARY KEY (id) # 添加主键,不指定约束名
ALTER TABLE ADD CONSTRAINT index_primary PRIMARY KEY (id)
ALTER TABLE DROP FOREIGN KEY # 移除所有主键
# 修改表:添加或移除FOREIGN KEY约束
ALTER TABLE schools ADD FOREIGN KEY (user_id) REFERENCES users(id);
# 为schools表的user_id列添加外键,外键为users表的id列,不指定约束名称,默认为user_id
ALTER TABLE schools ADD CONSTRAINT inde_foreign_key FOREIGN KEY (user_id) REFERENCES users(id) # 添加外键约束并指定约束名
# 修改表: 添加或移除UNIQUE约束
ALTER TABLE ADD UNIQUE (name) # 为name列添加唯一性约束,不指定索引名
ALTER TABLE ADD CONSTRAINT index_name UNIQUE (name) # 添加约束并指定约束名
ALTER TABLE DROP INDEX index_name # 移除唯一约束
# 修改表: 添加或移除DEFAULT约束
ALTER TABLE schools ALTER age SET DEFAULT 24; # 修改表:修改age列指定默认值为24
ALTER TABLE schools ALTER COLUMN age SET DEFAULT 24 # 同上
ALTER TABLE schools ALTER COLUMN age DROP DEFAULT # 移除default约束
- 添加
ADD CONSTRAINT cons_name 约束 (作用列)
,添加约束并指定约束名