mysql中外鏈結怎麼定義 在MySQL中定義外來鍵

2021-10-18 21:50:51 字數 2551 閱讀 2284

資料庫mysql

建立外來鍵的前提: 本表的列必須與外來鍵型別相同(外來鍵必須是外表主鍵)。

外來鍵作用: 使兩張表形成關聯,外來鍵只能引用外表中的列的值!

指定主鍵關鍵字: foreign key(列名)

引用外來鍵關鍵字: references (外來鍵列名)

事件觸發限制: on delete和on update , 可設引數cascade(跟隨外來鍵改動), restrict(限制外表中的外來鍵改動),set null(設空值),set default(設預設值),[預設]no action

例如:outtable表 主鍵 id 型別 int

建立含有外來鍵的表:

create table temp(

id int,

name char(20),

foreign key(id) references outtable(id) on delete cascade on update cascade);

說明:把id列 設為外來鍵 參照外表outtable的id列 當外來鍵的值刪除 本表中對應的列篩除 當外來鍵的值改變 本表中對應的列值改變。

自己實踐 才能完全了解外來鍵的作用 關鍵是:事件觸發限制的作用

正文:和所有開源專案的參考文件一樣,mysql文件中的sql語法說明讓我等初學者看起來頭大。這不, 今天我花了大半天的工夫,才把在mysql中設定外來鍵的語法弄明白,所以趕緊寫下來,一來加深一下印象,二來萬一過兩天忘了,自己也好回來查一下。

定 義資料表

假如某個電腦生產商,它的資料庫中儲存著整機和配件的產品資訊。用來儲存整機產品資訊的表叫做 pc;用來儲存配件供貨資訊的表叫做 parts。

在 pc 表中有乙個字段,用來描述這款電腦所使用的cpu型號;

在 parts 表中相應有乙個字段,描述的正是cpu的型號,我們可以把它想成是全部cpu的型號列表。

很顯然,這個廠家生產的電腦,其 使用的 cpu 一定是供貨資訊表(parts)中存在的型號。這時,兩個表中就存在一種約束關係(constraint)—— pc 表中的 cpu 型號受到 parts 表中型號的約束。

首先我們來建立 parts 表:

create table parts (

... 字段定義 ...,

model varchar(20) not null,

... 字段定義 ...

接 下來是 pc 表:

create table pc (

... 字段定義 ...,

cpumodel varchar(20) not null,

... 字段定義 ...

設定索引

若 要設定外來鍵,在參照表 (referencing table,即pc表) 和被參照表 (referenced table,即parts表) 中,相對應的兩個字段必須都設定索引 (index)。

對parts表:

alter table parts add index idx_model (model);

這句話的意思是,為 parts 表增加乙個索引,索引建立在 model 欄位上,給這個索引起個名字叫idx_model。

對pc表也類似:

alter table pc add index idx_cpumodel (cpumodel);

事實上這兩個索引可以在建立表的時候就設定。這裡只是為了突出其必要性。

定 義外來鍵

下面為兩張表之間建立前面所述的那種「約束」。因為pc的cpu型號必須參照parts表中的相應型號,所以我們將pc表 的cpumodel欄位設定為「外來鍵」(foreign key),即這個鍵的參照值來自於其他表。

alter table pc add constraint fk_cpu_model

foreign key (cpumodel)

references parts(model);

第一行是說要為pc表設定外來鍵,給這個外來鍵起乙個名字叫做fk_cpu_model; 第二行是說將本表的cpumodel欄位設定為外來鍵;第三行是說這個外來鍵受到的約束來自於parts表的model欄位。

這樣,我們的外 鍵就搞好了!如果我們試著create一台pc,它所使用的 cpu 的型號是 parts 表中不存在的,那麼 mysql 會禁止這台 pc 被 create 出來。

級聯操作 一切看起來都挺好的,不是嗎? 考慮以下這種情況: 技 術人員發現,乙個月之前輸入到 parts 表中的某個系列的 cpu (可能有很多款)的型號全都輸錯了乙個字母,現在需要改正。我們希望的是,當 parts 表中那些 referenced column 有所變化時,相應表中的 referencing column 也能自動更正。 可 以在定義外來鍵的時候,在最後加入這樣的關鍵字: on update cascade; 即在主表更新時,子表(們)產生連鎖更新動作,似乎有些人喜歡把這個叫「級聯」操作。:) 如果把這語句完整的寫出來,就是: alter table pc add constraint fk_cpu_model      foreign key (cpumodel)      references parts(model)     on update cascade; 除了 cascade 外,還有 restrict(禁止主表變更)、set null(子表相應字段設定為空)等操作。

M 在Makefile中進行巨集定義 D

在源 裡面如果這樣是定義的 ifdef macroname 可選 endif 那在makefile裡面 gcc d macroname macrodef 或者gcc d macroname 這樣就定義了預處理巨集,編譯的時候可選 就會被編譯進去了。對於gcc編譯器,有如下選項 d macro str...

mysql怎麼定義外來鍵

建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表主鍵 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的列的值!指定主鍵關鍵字 foreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on update 可設引...

mysql怎麼定義外來鍵

資料庫mysql 建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表主鍵 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的列的值!指定主鍵關鍵字 foreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on u...