MySQL 约束、表连接、表关联、索引 (4)

MySQL 约束、表连接、表关联、索引

四、表关联

关联表之间的关系:一对多,多对多(需中间表),一对一。

被关联字段永远是唯一的,关联字段则不一定。

1、一对多(最常用)

A表中唯一一条记录对应B表中多条记录。“一”的一方是主表(被关联表),“多”的一方是从表(关联表),因此外键设在“多”的一方。

需要关心的:1.保证主表被关联的字段必须唯一(主键或unique约束);

      2.保证从表关联字段必须可以重复。

关联方法:在从表(关联表)加一个字段,将其设为外键指向主表唯一性字段。注意二者类型一致。

例:

#===被关联的表===

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,           #增加1个字段,设为外键

constraint Fk_pressid_id foreign key(press_id) references press(id) on delete cascade on update cascade

);

2、多对多

A表中唯一一条记录对应B表中多条记录,反之亦然。如一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多。

需要关心的:1.保证A、B表被关联字段必须唯一(主键或unique约束);

      2.新建一张表,保存A、B表的被关联字段,并且保证新表中的关联字段也必须唯一(主键或unique约束)。

关联方法:在新表中,增加两个字段,作为联合主键或联合唯一,再将该两个字段分别设为外键指向A、B表的唯一性字段。注意类型一致。

例:

#===被关联的表===

create table book1(

id int primary key auto_increment,

name varchar(10),

price float(3,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,   #增加2个字段,联合唯一约束,再分别设为外键

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

);

3、一对一(最少用)

A表和B表的记录最多是一一对应。通常用在数据分割(分割出来的字段肯定和原表字段数据一致)。如用户和管理员(只有管理员才可以登录,一个管理员对应一个用户)。

需要关心的:1.保证主表中的被关联字段必须唯一(主键或unique约束);

      2.保证从表中的关联字段也必须唯一(主键或unique约束),这是与“一对多”的区别之处。

关联方法:在从表(关联表)加一个字段,必须设为唯一(主键或unique约束),再将其设为外键指向主表唯一性字段。注意二者类型一致。

例:

#===被关联的表===

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,      #增加1个字段,设为唯一(区别于“一对多”),再设为外键

password varchar(16),

foreign key(user_id) references user(id) on delete cascade on update cascade

);

MySQL 约束、表连接、表关联、索引

MySQL 约束、表连接、表关联、索引

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypzpy.html