constraint 起個名字 foreign key(關聯字段) references 被關聯表(被關聯字段) on delete cascade # 是否聯動刪除 on update cascade # 是否聯動更新
一個出版社能夠出多本書 一對多spa
一本書能夠被多個出版社出版 一對多code
被關聯表blog
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字段 創建於被關聯表的映射 rem
被關聯表的被關聯字段必須是惟一的,即多對一的 "一" it
關聯表的FK 字段是能夠不惟一的, 即多對一的 "多" table
關聯字段 類型 unique, # 一對一的管理字段必須在關聯表中惟一 constraint 起個名字 foreign key(關聯字段) references 被關聯表(被關聯字段) on delete cascade # 是否聯動刪除 on update cascade # 是否聯動更新
管理員對於用戶class
每一個管理員都是一個用戶 一對一關係 date
被關聯表float
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 關聯
在插入數據的時候要對第三張表進行操做建立管理數據才能夠實現多對多關係映射