一、约束的概念
约束是在表中定义的用于维护数据完整性的一些规则
- 通过约束可以防止错误数据的插入
- 通过约束保证表之间的数据一致性
二、约束的分类
- 主键约束
Primay Key Coustraint:唯一性,非空性 - 默认约束
Default Coustraint:数据的默认值 - 唯一约束
Unique Counstraint:数据唯一性,可以空,但是只能有一个 - 外键约束
Foreign Key Counstraint:需要建立两表间的关系并引用主表的列 - 检查约束
Check Counstraint:对该列数据的范围、格式的限制(如:年龄、性别等)
三、约束的语法
3.1 主键约束
主键约束前面已经做了详细的简介,见《6.MySQL基本语法–主键约束》
3.2 默认约束
- DEFAULT
当插入记录时没有明确为字段赋值,则自动赋予默认值
CREATE TABLE Student(
id INT PRIMARY KEY,
s_name VARCHAR(20),
sex TINYINT DEFAULT 3
);
3.3 唯一约束
- UNIQUE KEY
唯一约束,保证数据的唯一性
PRIMARY KEY 只有一个约束,UNIQUE KEY 可以有多个
字符段可以为空值 NULL
CREATE TABLE Student(
id INT PRIMARY KEY,
s_name VARCHAR(20) UNIQUE KEY,
);
3.4 非空约束 与默认空值
- NOT NULL :指定字段值不能为空
- NULL : 空值
CREATE TABLE Student(
id INT PRIMARY KEY,
s_name VARCHAR(20) DEFAULT NULL UNIQUE KEY,
pwd VARCHAR(20) NOT NULL,
);
3.5 外键约束
- Foreign Key
外键约束
保持数据一致性,完整性
实现一对一,一对多关系
CREATE TABLE SC(
sid INT,
cid INT,
foreign key(sid) references S(id),
foreign key(cid) references C(id)
);
实际项目中,这种物理外键不常用,一般通过逻辑外键进行定义,即通过表结构进行外键约定
外键的条件:
1:子表和父表必须存储引擎相同
2:数据表存储引擎为InnoDB
3:外键列和参照列数据类型要一致(数字长度和是否有符号要保持一致,字符长度可以不同)
4:外键列和参照列必须创建索引