常见约束
一种限制,限制表中的数据,为了保证表中数据的准确和可靠性
create table 表名(
字段名 字段类型 约束
)
分类 六大约束
- not NULL : 非空约束,用于保证该字段的值不能为空,比如姓名、学号等
- DEFAULT : 默认,用于保证该字段有默认值,比如:性别、
- PRIMARY KEY:用于保证该字段的值具有唯一性,并且非空,比如学号、员工编号
- unique : 唯一约束,用于保证该字段的值具有唯一性,但可以为空,比如:座位号,
- check : 检查约束,mysql中不支持(语法不包括,但不报错,只是不执行),比如:年龄、性别
- foreign key,用于限制两个表的关系,用于保证该字段的值必须来自主表关联列的值。在从表添加外键约束,用于引用在主表中某列的值,比如:专业编号,员工表的部门编号,工种编号
添加约束的时机
- 创建表时
- 修改表时
一定是在数据添加之前
约束添加的分类
- 列级约束 : 语法上来说,六大约束都可以,但外键约束没有效果(即写也白写)
- 表级约束: 除了 默认、非空,其它都支持
create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
创建表时添加约束
添加列级约束
直接在字段名和类型后面追加约束即可,只支持默认、非空、主键、唯一。
create database students;
use students;
create table major(
id int primary key,
majorName varchar (20)
)
create table stuinfo(
id INT primary key, # 主键
stuName varchar(20) not null, # 非空
gender char(1) check (gender='男' or gender = '女'), #检查约束
seat int unique, #唯一
age int default 18 # 默认约束
majorId int references myjor(id) # 外键
)
添加表级约束
在最后加,加表级约束前应该加上分号区分
在各个字段的最下面
【constraint 约束名】 约束类型(字段名)
drop table if exists stuinfo;
create table stuinfo(
id int,
constraint pk primary key(id) # 表示为id添加主键,这里主键的名字可以随意,反正最后都是primary
constraint uq unique(seat), # 唯一键
constraint ck check (gender = '男' or '女'), #检查约束
# 外键, 注意,这里需要加foreign key
# 最好用 fk_当前表名_主表名 命名,因为一个表可能有多个外键
constraint fk_当前表名_主表名 foreign key (majorid) references major(id)
)
什么时候添加列级、表级约束
create table if exists stuinfo(
)