程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL外鍵的簡略進修教程

關於MySQL外鍵的簡略進修教程

編輯:MySQL綜合教程

關於MySQL外鍵的簡略進修教程。本站提示廣大學習愛好者:(關於MySQL外鍵的簡略進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是關於MySQL外鍵的簡略進修教程正文


在MySQL中,InnoDB引擎類型的表支撐了外鍵束縛。
外鍵的應用前提:
1.兩個表必需是InnoDB表,MyISAM表臨時不支撐外鍵(聽說今後的版本有能夠支撐,但至多今朝不支撐);
2.外鍵列必需樹立了索引,MySQL 4.1.2今後的版本在樹立外鍵時會主動創立索引,但假如在較早的版本則須要顯示樹立;
3.外鍵關系的兩個表的列必需是數據類型類似,也就是可以互相轉換類型的列,好比int和tinyint可以,而int和char則弗成以;
外鍵的利益:可使得兩張表聯系關系,包管數據的分歧性和完成一些級聯操作;
外鍵的界說語法:
代碼以下:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, …) 
REFERENCES tbl_name (index_col_name, …) 
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 

該語法可以在 CREATE TABLE 和 ALTER TABLE 時應用,假如不指定CONSTRAINT symbol,MYSQL會主動生成一個名字。
ON DELETE、ON UPDATE表現事宜觸發限制,可設參數:

  • RESTRICT(限制表面中的外鍵修改)
  • CASCADE(追隨外鍵修改)
  • SET NULL(設空值)
  • SET DEFAULT(設默許值)
  • NO ACTION(無舉措,默許的)


假如子表試圖創立一個在父表中不存在的外鍵值,InnoDB會謝絕任何INSERT或UPDATE操作。假如父表試圖UPDATE或許DELETE任何子表中存在或婚配的外鍵值,終究舉措取決於外鍵束縛界說中的ON UPDATE和ON DELETE選項。InnoDB支撐5種分歧的舉措,假如沒有指定ON DELETE或許ON UPDATE,默許的舉措為RESTRICT:

  1. CASCADE: 從父表中刪除或更新對應的行,同時主動的刪除或更新自表中婚配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支撐。

  2. SET NULL: 從父表中刪除或更新對應的行,同時將子表中的外鍵列設為空。留意,這些在外鍵列沒有被設為NOT NULL時才有用。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支撐。

  3. NO ACTION: InnoDB謝絕刪除或許更新父表。

  4. RESTRICT: 謝絕刪除或許更新父表。指定RESTRICT(或許NO ACTION)和疏忽ON DELETE或許ON UPDATE選項的後果是一樣的。

  5. 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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved