歡迎使用CSDN markdown編輯器

2021-07-04 03:46:49 字數 1756 閱讀 5945

mysql有兩種常用的引擎型別:myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。innodb中外鍵約束定義的語法如下:

[constraint [symbol]] foreign key

[index_name] (index_col_name, …)

references tbl_name (index_col_name,…)

[on delete reference_option]

[on update reference_option]

reference_option:

restrict | cascade | set null | no action

外來鍵的使用需要滿足下列的條件:

兩張表必須都是innodb表,並且它們沒有臨時表。

建立外來鍵關係的對應列必須具有相似的innodb內部資料型別。

建立外來鍵關係的對應列必須建立了索引。

假如顯式的給出了constraint symbol,那symbol在資料庫中必須是唯一的。假如沒有顯式的給出,innodb會自動的建立。

如果子表試圖建立乙個在父表中不存在的外鍵值,innodb會拒絕任何insert或update操作。如果父表試圖update或者delete任何子表中存在或匹配的外鍵值,最終動作取決於外來鍵約束定義中的on update和on delete選項。innodb支援5種不同的動作,如果沒有指定on delete或者on update,預設的動作為restrict:

cascade: 從父表中刪除或更新對應的行,同時自動的刪除或更新自表中匹配的行。on delete canscade和on update canscade都被innodb所支援。

set null: 從父表中刪除或更新對應的行,同時將子表中的外來鍵列設為空。注意,這些在外鍵列沒有被設為not null時才有效。on delete set null和on update set set null都被innodb所支援。

no action: innodb拒絕刪除或者更新父表。

restrict: 拒絕刪除或者更新父表。指定restrict(或者no action)和忽略on delete或者on update選項的效果是一樣的。

set default: innodb目前不支援。

外來鍵約束使用最多的兩種情況無外乎:

1)父表更新時子表也更新,父表刪除時如果子表有匹配的項,刪除失敗;

2)父表更新時子表也更新,父表刪除時子表匹配的項也刪除。

前一種情況,在外鍵定義中,我們使用on update cascade on delete restrict;後一種情況,可以使用on update cascade on delete cascade。

innodb允許你使用alter table在乙個已經存在的表上增加乙個新的外來鍵:

alter table tbl_name

add [constraint [symbol]] foreign key

[index_name] (index_col_name, …)

references tbl_name (index_col_name,…)

[on delete reference_option]

[on update reference_option]

innodb也支援使用alter table來刪除外來鍵:

alter table tbl_name drop foreign key fk_symbol;

參考:mysql 5.1 manual: foreign key constraints

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...