MySql约束

226 阅读1分钟

约束类型

NOT NULL        非空约束: 用于保证字段不能为空
DEFAULT         默认约束: 用于保证字段有默认值
PRIMARY KEY     主键:      用于保证字段值具有唯一性,且不能为空
UNIQUE          唯一:     用于保证字段值具有唯一性, 可以为空
FOREIGN KEY     外键:      用于限制两个表的关系

创建表时添加约束

create table stu(
    id     INT         PRIMARY KEY  AUTO_INCREMENT, # 主键约束
    s_name VARCHAR(20) NOT NULL,                    # 非空约束
    age    TINYINT(3)  DEFAULT  18,                 # 默认约束
    phone  CHAR(11)    UNIQUE                       # 唯一约束
)

修改表是添加约束

ALTER TABLE stu ADD COLUMN id_card  CHAR(18) UNIQUE;              # 添加唯一约束
ALTER TABLE stu MODIFY COLUMN age TINYINT DEFAULT 20;             # 修改默认值约束
ALTER TABLE stu ADD COLUMN address VARCHAR(100) NOT NULL;         # 添加非空约束
ALTER TABLE stu MODIFY COLUMN id INT PRIMARY KEY;                 # 添加主键约束
ALTER TABLE stu ADD CONSTRAINT [uq_name] UNIQUE(s_sn);            # 添加唯一约束 uq_name 约束名称
ALTER TABLE stu ADD CONSTRAINT [pk_name] PRIMARY KEY(id);         # 添加主键约束 pk_name 约束名称
ALTER TABLE stu ADD CONSTRAINT [fk_name] FOREIGN KEY(c_id) REFERENCES class(c_id);  # 添加外键约束 fk_name外键约束名称 可省略

删除约束

ALTER TABLE stu DROP PRIMARY KEY;         # 删除主键
ALTER TABLE stu DROP INDEX [column];      # 删除唯一约束  column 唯一约束所在的列
ALTER TABLE stu DROP INDEX [index_name];  # 删除唯一约束  index_name 唯一约束名称
ALTER TABLE stu DROP INDEX [index_name];  # 删除外键约束  index_name 外键约束名称
ALTER TABLE stu DROP INDEX [column];      # 删除外键约束  column 外键约束所在列
ALTER TABLE stu MODIFY column VARCHAR(30) NULL; # 删除非空约束