5.6 数据库表关系
多对一或者一对多
格式:
constraint 起个名字 foreign key(关联字段) references 被关联表(被关联字段) on delete cascade # 是否联动删除 on update cascade # 是否联动更新
示例:
一个出版社可以出多本书 一对多
一本书可以被多个出版社出版 一对多
代码:
被关联表
create table press( id int primary key auto_increment, name char(20) );
关联表
create table book( book_id int primary key auto_increment, book_name varchar(20), book_price int, press_id int,
constraint Fk_pressid_id foreign key(press_id) references press(id) on delete cascade on update cascade );
详解
FK 字段在关联表创建,会新增一个 FK字段 建立于被关联表的映射
被关联表的被关联字段必须是唯一的,即多对一的 "一"
关联表的FK 字段是可以不唯一的, 即多对一的 "多"
一对一
格式:
关联字段 类型 unique, # 一对一的管理字段必须在关联表中唯一 constraint 起个名字 foreign key(关联字段) references 被关联表(被关联字段) on delete cascade # 是否联动删除 on update cascade # 是否联动更新
示例:
管理员对于用户
每个管理员都是一个用户 一对一关系
代码:
被关联表
create table user( id int primary key auto_increment, #主键自增 name char(10) );
关联表
create table admin( id int primary key auto_increment, user_id int unique, # 唯一索引 password varchar(16), foreign key(user_id) references user(id) # 建立外键索引 on delete cascade on update cascade );
详解
一对一关系基于 FK 的使用加上了 唯一索引来限制 ,从而实现两边都是唯一的索引
多对多
格式:
unique(关联字段1,关联字段2), # 建立联合唯一
constraint 起个名字 foreign key(关联字段) references 被关联表(被关联字段)
on delete cascade # 是否联动删除
on update cascade # 是否联动更新
示例:
书和作者的关系
一个作者可以写多本书,一本书也可以有多个作者
双向的一对多,即多对多
代码:
被关联表1
create table book1( id int primary key auto_increment, name varchar(10), price float(3,2) );
被关联表2
create table author( id int primary key auto_increment, name char(5) );
关联表
create table author2book( id int primary key auto_increment, book_id int not null, author_id int not null,
unique(book_id,author_id), # 建立联合唯一
foreign key(book_id) references book1(id) # 对每个表进行外键关联 on delete cascade on update cascade,
foreign key(author_id) references author(id) # 对每个表进行外键关联
on delete cascade
on update cascade );
详解
多对多的关系已经无法用两张表完成。必须多建立一张表用来存储关系字段的联系记录
第三张表建立的时候要对两个表分别进行 FK 关联
在插入数据的时候要对第三张表进行操作创建管理数据才可以实现多对多关系映射
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/10344499.html