约束是一种限制,用于限制表中的数据
约束6大类:
1. not null 非空
2.default 默认
3.Primary key 主键,用于保证该字段的值具有唯一性,并且非空,例如学号,身份证号这样
4. unique:唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号
5.check : 检查约束【mysql不支持】
6. foreign key 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
添加约束的时机
1.创建表时
2.修改表时
约束的添加分类:
列级约束:
六大约束语法上都支持,但外键约束没有效果
# 添加列级约束,形式是相当于修改列的类型一样,在后面加上约束即可 ALTER TABLE runaway MODIFY COLUMN stuname VARCHAR(10) UNIQUE ;
# 添加表级约束 ALTER TABLE runaway ADD UNIQUE(gender);
alter table 表名 drop foreign key 外码名;
表级约束:
除了非空、默认、其他支持
主键与唯一对比(重点):
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 可以 不可以 最多有一个 是(如果组和那么唯一特性是组合的都相同)
唯一 可以 可以 可以有多个
外键重点:
1.要求在从表设置主外键关系
2.从表的外键列的类型和主表的关联列的类型要求一直或者兼容,名称无要求
3.主表的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表再插入从表,
5.删除数据时,先插入从表,在删除主表
修改表时添加约束:
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 约束
2. 添加表级约束
alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】
3. 删除主键
alter table 表名 modify column 字段名 字段类型 (约束类型不写)
# 标识列 自增长列 auto_increment(只会往后增长),标识列不一定和主键搭配,但要求是一个key,且一个表最多有一个标识列
含义:可以不用手动的插入值,系统默认的序列值
例如将id设置为标识列 id INT PRIMARY KEY AUTO_INCREMENT
标识列只能是数值型(整形或者小数都行)
例如:
CREATE TABLE lenss( lenssid INT PRIMARY KEY, lenssname VARCHAR(10) NOT NULL ); CREATE TABLE classa( id INT PRIMARY KEY AUTO_INCREMENT, stuname VARCHAR(10) NOT NULL, desknumber INT UNIQUE, gender CHAR DEFAULT 'm', lenssid INT, CONSTRAINT wj_class_lenss FOREIGN KEY(lenssid) REFERENCES lenss(lenssid) );
总结:
主键与唯一:
1.区别:
1.一个表至多有一个主键,但可以有多个唯一
2.主键不允许为空,唯一可以为空
2.相同点
1.都具有唯一性
2.都支持组合键
外键