mysql表定义外键语法_mysql设置外键的语法怎么写?
2012-08-31 回答
mysql外鍵設(shè)置詳解
(1) 外鍵的使用:
外鍵的作用,主要有兩個:
一個是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性
一個就是能夠增加er圖的可讀性
有些人認為外鍵的建立會給開發(fā)時操作數(shù)據(jù)庫帶來很大的麻煩.因為數(shù)據(jù)庫有時候會由于沒有通過外鍵的檢測而使得開發(fā)人員刪除,插入操作失敗.他們覺得這樣很麻煩
其實這正式外鍵在強制你保證數(shù)據(jù)的完整性和一致性.這是好事兒.
例如:
有一個基礎(chǔ)數(shù)據(jù)表,用來記錄商品的所有信息。其他表都保存商品id。查詢時需要連表來查詢商品的名稱。單據(jù)1的商品表中有商品id字段,單據(jù)2的商品表中也有商品id字段。如果不使用外鍵的話,當單據(jù)1,2都使用了商品id=3的商品時,如果刪除商品表中id=3的對應記錄后,再查看單據(jù)1,2的時候就會查不到商品的名稱。
當表很少的時候,有人認為可以在程序?qū)崿F(xiàn)的時候來通過寫腳本來保證數(shù)據(jù)的完整性和一致性。也就是在刪除商品的操作的時候去檢測單據(jù)1,2中是否已經(jīng)使用了商品id為3的商品。但是當你寫完腳本之后系統(tǒng)有增加了一個單據(jù)3 ,他也保存商品id找個字段。如果不用外鍵,你還是會出現(xiàn)查不到商品名稱的情況。你總不能每增加一個使用商品id的字段的單據(jù)時就回去修改你檢測商品是否被使用的腳本吧,同時,引入外鍵會使速度和性能下降。
(2) 添加外鍵的格式:
alter table yourtablename
add [constraint 外鍵名] foreign key [id] (index_col_name, ...)
references tbl_name (index_col_name, ...)
[on delete {cascade | set null | no action | restrict}]
[on update {cascade | set null | no action | restrict}]
說明:
on delete/on update,用于定義delete,update操作.以下是update,delete操作的各種約束類型:
cascade:
外鍵表中外鍵字段值會被更新,或所在的列會被刪除.
restrict:
restrict也相當于no action,即不進行任何操作.即,拒絕父表update外鍵關(guān)聯(lián)列,delete記錄.
set null:
被父面的外鍵關(guān)聯(lián)字段被update ,delete時,子表的外鍵列被設(shè)置為null.
而對于insert,子表的外鍵列輸入的值,只能是父表外鍵關(guān)聯(lián)列已有的值.否則出錯.
外鍵定義服從下列情況:(前提條件)
1)
所有tables必須是innodb型,它們不能是臨時表.因為在mysql中只有innodb類型的表才支持外鍵.
2)
所有要建立外鍵的字段必須建立索引.
3)
對于非innodb表,foreign key子句會被忽略掉。
注意:
創(chuàng)建外鍵時,定義外鍵名時,不能加引號.
如: constraint 'fk_1' 或 constraint "fk_1"是錯誤的
(3) 查看外鍵:
show create table ***;可以查看到新建的表的代碼以及其存儲引擎.也就可以看到外鍵的設(shè)置.
刪除外鍵:
alter table drop foreign key '外鍵名'.
注意:
只有在定義外鍵時,用constraint 外鍵名 foreign key .... 方便進行外鍵的刪除.
若不定義,則可以:
先輸入:alter table drop foreign key -->會提示出錯.此時出錯信息中,會顯示foreign key的系統(tǒng)默認外鍵名.--->
用它去刪除外鍵.
總結(jié)
以上是生活随笔為你收集整理的mysql表定义外键语法_mysql设置外键的语法怎么写?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电话车险与普通车险的区别 电话车险与普通
- 下一篇: linux cmake编译源码,linu