常见的约束有哪些?含义:约束就是一种限制,用于限制表中的数据,为了保证数据的准确性和可靠性
创建表时添加列级约束六大约束:
- NOT NULL : 非空约束,用于保证该字段的值不为空
比如姓名 学号
- DEFAULT: 默认约束,用于保证该字段有默认值
比如性别,日期
- PRIMARY KEY: 主键约束,用于保证该字段的值具有唯一性,并且非空
比如身份证,学号,员工编号
特点:一个表的主键最多只能有一个,但是可以用多个列混合组成一个主键
- UNIQUE : 唯一约束,用于保证该字段的值具有唯一性,但是可以为空
比如座位号
特点:一个表的唯一约束可以有多个,也可以由多个列混合组成混合唯一约束,
并且唯一约束的列最多只能有一个null,当出现两个null就不唯一了,于是报错。
- check: 检查约束(mysql中不支持,但是语法不报错,就是不起作用)
比如年龄,性别,在插入的时候会先校验是否合法
- FOREIGN: 外键约束 用于限制两个表的关系,保证该字段值必须来自于主表的关联列的值
特点:要在从表中设置外检;主表中关联列的类型必须与从表中外检列的类型相同或兼容,名称可以不相同;主表中的关联列必须是一个key(一般是主键或者唯一键,外键也可以);插入数据时,先插入主表再插入从表,删除数据时先删除从表,再删除主表。
创建表时添加表级约束为了测试外键,先创建一个外检引用主表
CREATE TABLE major(
id INT PRIMARY KEY, #主表主键
majorName VARCHAr(20) NOT NULL
);开始创建列级约束
CREATE TABLE ljys(
id INT PRIMARY KEY ,#主键约束
stuName VARCHAr(20) NOT NULL ,#非空约束
gender char(1) CHECK(gender='男' OR gender='女') ,#检查约束(在mysql中不起作用)
seat INT UNIQUE ,#唯一约束
majorID INT REFERENCES major(id),#外键约束,引用major表中的id
createdate TIMESTAMP DEFAULT NOW() #默认约束
);这时候查看表结构,发现除了外键约束和check约束,其他都添加上并且起作用
创建约束的通用方法为了测试外键,先创建一个外检引用主表
CREATE TABLE major(
id INT PRIMARY KEY, #主表主键
majorName VARCHAr(20) NOT NULL
);开始创建表级约束
CREATE TABLE bjys(
id INT ,
stuName VARCHAr(20),
gender char(1) ,
seat INT ,
majorID INT ,
createdate TIMESTAMP ,
ConSTRAINT pk PRIMARY KEY (id),#主键
ConSTRAINT uq UNIQUE (stuName),#非空
ConSTRAINT ck CHECK (gender='男' OR gender='女'),#check mysql不支持
ConSTRAINT fk FOREIGN KEY (majorID) REFERENCES major(id)#外检
);表级约束不支持默认和非空约束
主键、非空、唯一、默认、检查(mysql不起作用)这四个约束可以在列级约束创建
外检约束在表级约束创建
总结- 添加约束的时机:创建表时或者修改表时,必须在数据添加之前添加约束
- 主键,外键,唯一键,都会自动生成索引
- 添加约束分类:
二、标识列列级约束 :六大约束在语法上都支持,但是check和外键约束没有效果
表级约束:除了非空、默认两个约束,其他都支持
标识列又称作自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
创建标识列:
create TABLE bsl(
id int PRIMARY KEY auto_increment,
name varchar(20)
);
插入数据到表里只需要关心关键数据,添加了自增长的列无需关系INSERT into bsl value(null,'张三')
特点:
被添加标识列的列必须是一个key(主键,外键,唯一键)
一个表只能有一个自增长列
标识列的数据类型只能是数值型
可以通过set auto_increment_increment = 1 设置步长(每次则增长时增加多少)



