一、约束的分类
NOT NULL(非空约束)
用于保证该字段的值不能为空
比如姓名、学号等
DEFAULT(默认约束)
用于保证该字段有默认值
比如性别
比如给性别设置默认为‘男’
PRIMARY KEY(主键约束)
用于保证该字段的值具有唯一性,并且非空
比如学号、员工编号等
UNIQUE(唯一)
用于保证该字段的值具有唯一性,可以为空
比如座位号
CHECK(检查约束)
这里重点注意,mysql8.0.15以前的版本存储引擎都不支持 CHECK 约束,你可以正常输入约束,创建约束,语法不会报错,但是约束是不生效的。以前都是用ENUM 类型 或者 触发器代替检查约束这个功能。目前已经支持了。
用途:比如年龄、性别
输入约束以外的数据会报错。
create table banji( ID int primary key, sex char(2) check (sex in ('男','女')) default '男', age int check (age >= 16 and age <= 40) default 18, renshu tinyint , check (renshu >=30 and renshu <= 50) );
比如这个示例,大家可以粘贴到mysql玩玩,里面的检查约束有三个:
性别只能是男或者女,年龄要求在16到40之间,人数在30到50之间。
如果不满足都会拒绝插入该数据。
FOREIGN KEY(外键约束)
用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类
列级约束
六大约束语法上都支持,但外键约束没有效果
表级约束
除了非空、默认,其他的都支持
主键和唯一的大对比
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 √ × 至多有1个 √,但不推荐
唯一 √ √ 可以有多个 √,但不推荐
外键
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表
5、删除数据时,先删除从表,再删除主表*/
CREATE TABLE表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)CREATE DATABASEstudents;

我的微信
微信号已复制
我的微信
这是我的微信扫一扫