约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性
约束分类:
约束类型与关键字:
- 主键 PRIMARY KEY
- 默认值 DEFAULT
- 唯一 UNIQUE
- 外 FOREIGN KEY
- 非空 NOT NULL
示例MySQL语句code:
Github地址:https://github.com/kumataahh/xxx_database
CREATE DATABASE mysql_kumata; use mysql_kumata; /*班级表*/
CREATE TABLE class
(
class_name CHAR(20) NOT NULL, --非空键
student_num INT(10) DEFAULT '', --默认键
CONSTRAINT cls_pk PRIMARY KEY(cls_name) --主键
--自定义主键名:cls_pk,主键:cls_name
); /*学生信息表*/
CREATE TABLE student
(
id INT(10) PRIMARY KEY, --主键
name CHAR(20), --没有非空约束
age INT(10) NOT NULL, --非空约束
phone INT(12) NOT NULL,
UNIQUE (id), --唯一键
CONSTRAINT stu_fk FOREIGN KEY (in_cls) REFERENCES class(class_name) --外键
--自定义外键名:stu_fk 外键:in_cls,参考列为calss表的class_name列
); /*个人作品表*/
CREATE TABLE project
(
pro_num INT(10) NOT NULL,
pro_name CHAR(20) NOT NULL,
start_data DATE NOT NULL,
end_date DATE DEFAULT '2018-07-01',
of_cls CHAR(20) REFERENCES class(class_name),
CONSTRAINT pro_pk PRIMARY KEY (pro_num,pro_name) --复合主键
);
各关键字介绍:
主键 PRIMARY KEY
主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
- 通常情况下,我们会给每张表都会设置一个主键字段,用来标记记录的唯一性
- 但是不建议把业务含义字段作为主键,因为随着业务的变化,业务字段可能会出现重复。
- 建议给每张张独立添加一个叫id的字段,把这个id字段设置成主键,用来作为记录的唯一性。
默认值 DEFAULT
当没有插入数值的时候默认值才会起作用
唯一 UNIQUE
unique代表唯一约束。唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束。
外 FOREIGN KEY
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。
非空 NOT NULL
当某个字段必须要值(不能不插入数值,也不能插入null),就给这个字段添加一个非空约束