约束就是对表中数据的限制;可以保证表中的数据完整有效
非空约束 not null
-- 约束 user_id 字段值不能为 null
create table user (
user_id int not null,
uname varchar(10)
)
唯一性约束 unique
- 单个字段约束
-- 约束 email 字段不能重复(多个 null 不算重复)
create table user (
user_id int,
uname varchar(10),
email varchar(30) unique
)
- 多个字段联合约束
-- 建表时约束 user_id 和 uname 联合起来不可重复
create table user (
user_id int,
uname varchar(10),
email varchar(30),
unique(user_id, uname)
)
-- 下面这种情况是允许插进去的,即有 null 不算重复
INSERT INTO user (user_id) values (111);
INSERT INTO user (user_id) values (111)
主键约束 primary key( PK )
- 主键是每一行记录的唯一标识,类似于人的身份证号;主键约束的字段不可重复且不可为 null
- 任何一张表都应该有主键,没有主键的表一般为无效的表;一张表最多只能有一个主键,复合主键算 1 个
- 主键按用途可分为自然主键和业务主键两种,自然主键:和业务无关的值;业务主键:和业务紧密相关
- 开发中一般使用自然主键,因为主键一旦和业务挂钩,那么在业务发生变动时,可能会影响到主键
例:为 user 表的 user_id 字段添加主键约束
-- 方式 1
create table user (
user_id int PRIMARY KEY,
uname varchar(10),
email varchar(30)
)
-- 方式 2
create table user (
user_id int,
uname varchar(10),
email varchar(30),
PRIMARY KEY(user_id)
)
复合主键(了解)
create table user (
user_id int,
uname varchar(10),
email varchar(30),
PRIMARY KEY(user_id, uname) -- 复合主键任一字段值都不可为 null
)
外键约束 foreign key( FK )
- 例如描述班级和学生时,班级单独一张表,为保证学生表中存储的班级信息都存在于班级表中,我们可以将班级信息字段添加外键约束
- 班级表称为父表,学生表称为子表,先有父后有子,删除时先删子再删父
- 子表引用父表的字段不一定非要是主键,但一定要有唯一性约束
- 外键字段值可以为 null ,表示不关联到父表中的数据
例:班级和学生
create table class (
class_no int PRIMARY KEY,
class_name varchar(10)
)
CREATE TABLE student (
student_no int PRIMARY KEY,
name VARCHAR(10),
class_no int,
FOREIGN KEY(class_no) references class(class_no)
)
检查约束 check
- 检查数据表中字段值有效性的一种手段
CREATE TABLE class(
class_no int PRIMARY KEY,
class_name varchar(10)
check(class_no > 0)
)