關於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表現事宜觸發限制,可設參數:
假如子表試圖創立一個在父表中不存在的外鍵值,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;