– 参照完整性,指多表之间的设计,主要使用外键约束。
– 多表设计有:一对多,多对多,一对一。
– 1、一对多
– 客户和订单的,一个客户可以有多张订单,一张订单属于一个客户。
CREATE TABLE customers(
id int,
name VARCHAR(100),
address VARCHAR(255),
PRIMARY KEY(id) – 最后一行不能写逗号,否则报错。
);
CREATE TABLE orders(
order_num INT PRIMARY KEY,
price FLOAT(8,2),
status INT,
customer_id INT,
CONSTRAINT fk FOREIGN KEY(customer_id) REFERENCES customers(id)
);
– 外键一般放到数据量大的表中,以数据量小的为参靠
– CONSTRAINT 约束
– FOREIGN KEY 外键
– REFERENCES 以什么为参考
– 上面,创建一个外键约束,名字叫fk,参照的是customers表中的id。
子表的删除更新策略一共有4种:
1.1. CASCADE 级联策略。
主表的修改会被同步到子表中。
1.2. NO ACTION 无动作策略。
要删改主表,必须要先删改子表对应数据。
1.3 RSTRICT 主表约束策略。
此策略,对主表的约束跟NO ACTION一样。即删、更新主表前的主键,必须要先删、更新子表中对应的。
1.4 SET NO 置空策略。
使用此策略时,当主表主键删改,则子表中的外键 设置为NULL。
但如果子表的外键是主键,或者子表外键设置NOT NULL,则此时就相当于NO ACTION策略。
- 多对多
老师和学生,多对多关系。一个老师可以对应多个学生,一个学生可以对应多个老师。
CREATE TABLE teachers(
id int,
name varchar(100),
salary float(8,2),
PRIMARY KEY(id)
);
CREATE TABLE students(
id int,
name VARCHAR(100),
grade varchar(100),
PRIMARY KEY(id)
);
CREATE TABLE tch_stu(
t_id INT,
s_id INT,
PRIMARY KEY(t_id,s_id),
CONSTRAINT tch_fk FOREIGN KEY(t_id) REFERENCES teachers(id),
CONSTRAINT stu_fk FOREIGN KEY(s_id) REFERENCES students(id)
);
- 一对一
在开发中,一对一,设计到一张表中。