列级约束
not null
default
check
primary key
该字段值不可以重复
1、不可以为空
2、一个表中只能有一个主键,但是可以多个字段做组合主键
unique
该字段值不可以重复
1、可以为空
2、一个表中可以有多个唯一键,可以有组合唯一键
foreign key
用于限制多表的关系
1、从表的该字段值必须来自于主表的关联列的值
2、从表和主表的关联列的类型必须一样
3、主表的关联列必须是主键
4、在从表中设置外键
5、一个表中可以添加多个外键
6、插入数据时,先插入主表;删除数据时,先删除从表
表级约束
**创建表级约束**
CONSTRAINT 约束名 约束类型(字段)
**创建表级外键约束**
CONSTRAINT 约束名 foreign key(本表字段) references 别的表名(字段名)
修改表的约束
**添加约束**
方式一:
alter table 表名 modify column 字段 字段类型 约束类型;
方式二:
alter table 表名 add [CONSTRAINT 约束名] 约束类型 (字段);
**删除约束**
删除默认和非空
alter table 表名 modify column 字段 字段类型;(添加约束去掉 约束类型)
删除主键:
alter table 表名 drop primary key;
删除唯一约束:
alter table 表名 drop index 约束名;
删除外键约束:
alter table 表名 drop foreign key 约束名;
列级约束和表级约束的使用
约束的格式
create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型 列级约束,
表级约束
)
例:创建grade表包含id(主键),name字段;
创建stuinfo表包含id,stuname,gender(默认:男),age,gradeid;
其中id和stuname构成组合主键,使用表记约束方法为age添加唯一约束,
使用grade表中的id字段约束stuinfo表中的gradeid.
CREATE TABLE grade(
id INT PRIMARY KEY,
name VARCHAR(20)
)
CREATE TABLE stuinfo(
id INT NOT NULL,
stuname VARCHAR(20),
gender CHAR DEFAULT '男',
age INT UNSIGNED,
gradeid INT,
PRIMARY KEY(id,stuname),
CONSTRAINT uq UNIQUE(age),
CONSTRAINT fk_stuinfo FOREIGN KEY(gradeid) REFERENCES grade(id)
);