MySQL資料庫 外來鍵 foreign key

2022-08-24 03:45:13 字數 1715 閱讀 6919

1.多表關聯

表之間的關係

一對多/多對多/一對一

什麼時候要分表?

資料重複/結構混亂/擴充套件維護性差

2.外來鍵 約束
create table 表名(欄位名 型別(長度),foreign key(外來鍵的欄位名稱) refernces 對方表名(對方主鍵名));

create table teacher(id int primary key auto_increment,name char(15));

create table student(id int primary key auto_increment,name char(15));

#中間表

create table tsr(

id int primary key auto_increment,

t_id int,s_id int,

foreign key(t_id) references teacher(id),

foreign key(s_id) references student(id)

);

create table customer(c_id int primary key auto_increment,

name char(20),phonenum char(11),addr char(20));

create table student1(s_id int primary key auto_increment,

name char(20),

class char(11),

number char(20),

housenum char(20),c_id int unique,

foreign key(c_id) references customer(c_id)

);

使用外來鍵時 必須分清主從關係

**外來鍵的第一種約**:束先建主表 再建從表

**外來鍵的第二個約束**:先插入主表 再插入從表

**外來鍵的第三個約束**:刪除記錄時 先刪除從表記錄 再刪主表記錄

**外來鍵的第四個約束**:從表更新外來鍵時 必須保證外來鍵是存在的

**外來鍵的第五個約束**:更新主表的id時 必須先刪除從表關聯的資料 或者把關聯資料 關聯其他的主表id

**外來鍵的第六個約束**:刪除主表時 要先刪除從表

有了這幾個約束後,主表和從表中的資料必然是完整的

3.級聯 cascade

很多情況下,我們就是要刪除主表,然而這樣需要至少兩條sql語句,操作麻煩,這時可以使用級聯

create table 表名(欄位名 型別(長度),foreign key(外來鍵的欄位名稱) refernces 對方表名(對方主鍵名)on delete cascade); 

create table 表名(欄位名 型別(長度),foreign key(外來鍵的欄位名稱) refernces 對方表名(對方主鍵名)on update cascade);

on delete cascade 當主表刪除記錄時 從表相關聯的記錄同步刪除

on update cascade 當主表id更新時 從表相關聯的記錄同步更新

注意這是單向的 主表變化時 級聯操作從表 從表的變化不會級聯到主表

MySQL 資料庫外來鍵

如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...

MySQL資料庫外來鍵

設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...

mysql資料庫教程 外來鍵 MySQL資料庫外來鍵

設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...