外键约束
在本人之前的博文中,本人讲解了数据库中操作表的基本SQL语句,
那么,现在本人来讲解下多表查询的相关知识点。
首先,本人来讲解下ER图的相关知识点:
ER图:
请观看本人博文 —— 《【数据库】ER图》
一对多:
概念:
在开发中,关系中的一方称之为主表 或者 一表,
关系中的多方称之为多表或者从表
为了表示一对多的关系:
一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)
字段类型一般和主表的主键的类型保持一致,
我们称这个字段为外键
添加外键的格式:
alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
添加了外键约束之后有如下特点:
- 主表中不能删除从表中已引用的数据
- 从表中不能添加主表中不存在的数据
那么,现在本人来通过一个例子展示下“一对多”的关系:
例1 —— 用户和订单:
本人现在来分析下这个例题:
分析:
在用户与订单的关系中,由于一个用户拥有多个订单,所以,用户表是一表,订单表是多表
那么,现在本人来展示下用户表:
create table user(
id int primary key auto_increment,
username varchar(20)
);
接下来是订单表:
create table orders(
id int primary key auto_increment,
totalprice double,
user_id int
);
接下来,我们给订单表设置外键:
alter table orders add foreign key(user_id) references user(id);
若是我们想删除主表中的数据,则有两种方法:
- 方式1: 级联删除(ON DELETE CASCADE)
即:在添加外键约束的语句最后面加上如下修饰符:
ON DELETE CASCADE
ALTER TABLE orders ADD FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE;
那么,现在本人来展示下生成的外键约束关系:
之后你就可以删除主表中的数据了
当然也可以将 级联删除 和 级联更新 都加上:
ALTER TABLE orders ADD FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE;
- 方式2:
先把带有外键的多表的数据删除,再删除一表中的数据
多对多:
对于多对多现象,我们一般是这么处理的:
处理方式:
引入一张中间表,存放两张表的主键,
一般会将这两个字段设置为联合主键,
这样就可以将多对多的关系拆分
成两个一对多关系了
为了保证数据的有效性和完整性
需要在中间表上添加两个外键约束即可
那么,现在本人来通过一个例子展示下“一对多”的关系:
例1 —— 商品和订单:
本人现在来分析下这个例题:
分析:
一种商品可以存在多个订单中,一个订单也包含多种商品,所以商品表和订单表都是多表
那么,我们首先来创建商品表:
create table product(
id int primary key auto_increment,
name varchar(20),
price double
);
现在,本人再来创建订单表:
create table orders(
id int primary key auto_increment,
totalprice double,
user_id int
);
现在,我们根据前两张表,来制作中间表:
create table orderitem(
oid int,
pid int
);
添加外键约束:
alter table orderitem add foreign key(oid) references orders(id);
alter table orderitem add foreign key(pid) references product(id);
那么,本人来展示下生成的外键约束:
那么,本篇博文的知识点在这里就讲解完毕了。
(请观看本人博文 —— 《【数据库】约束》)