日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql外键约束脚本_如何在MySQL中设置外键约束

發布時間:2025/4/16 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql外键约束脚本_如何在MySQL中设置外键约束 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1) 外鍵的使用:

外鍵的作用,主要有兩個:

一個是讓數據庫自己通過外鍵來保證數據的完整性和一致性

一個就是能夠增加ER圖的可讀性

有些人認為外鍵的建立會給開發時操作數據庫帶來很大的麻煩.因為數據庫有時候會由于沒有通過外鍵的檢測而使得開發人員刪除,插入操作失敗.他們覺得這樣很麻煩

其實這正式外鍵在強制你保證數據的完整性和一致性.這是好事兒.

例如:

有一個基礎數據表,用來記錄商品的所有信息。其他表都保存商品ID。查詢時需要連表來查詢商品的名稱。單據1的商品表中有商品ID字段,單據2的商品表中也有商品ID字段。如果不使用外鍵的話,當單據1,2都使用了商品ID=3的商品時,如果刪除商品表中ID=3的對應記錄后,再查看單據1,2的時候就會查不到商品的名稱。

當表很少的時候,有人認為可以在程序實現的時候來通過寫腳本來保證數據的完整性和一致性。也就是在刪除商品的操作的時候去檢測單據1,2中是否已經使用了商品ID為3的商品。但是當你寫完腳本之后系統有增加了一個單據3 ,他也保存商品ID找個字段。如果不用外鍵,你還是會出現查不到商品名稱的情況。你總不能每增加一個使用商品ID的字段的單據時就回去修改你檢測商品是否被使用的腳本吧,同時,引入外鍵會使速度和性能下降。

(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外鍵關聯列,delete記錄.

set null:

被父面的外鍵關聯字段被update ,delete時,子表的外鍵列被設置為null.

而對于insert,子表的外鍵列輸入的值,只能是父表外鍵關聯列已有的值.否則出錯.

外鍵定義服從下列情況:(前提條件)

1)

所有tables必須是InnoDB型,它們不能是臨時表.因為在MySQL中只有InnoDB類型的表才支持外鍵.

2)

所有要建立外鍵的字段必須建立索引.

3)

對于非InnoDB表,FOREIGN KEY子句會被忽略掉。

注意:

創建外鍵時,定義外鍵名時,不能加引號.

如: constraint 'fk_1' 或 constraint "fk_1"是錯誤的

(3) 查看外鍵:

SHOW CREATE TABLE ***;可以查看到新建的表的代碼以及其存儲引擎.也就可以看到外鍵的設置.

刪除外鍵:

alter table drop foreign key '外鍵名'.

注意:

只有在定義外鍵時,用constraint 外鍵名 foreign key .... 方便進行外鍵的刪除.

若不定義,則可以:

先輸入:alter table drop foreign key -->會提示出錯.此時出錯信息中,會顯示foreign key的系統默認外鍵名.--->

用它去刪除外鍵.

(4) 舉例

實例一:

4.1

CREATE TABLE parent(id INT NOT NULL,

PRIMARY KEY (id)

) TYPE=INNODB;??????????????????????-- type=innodb 相當于 engine=innodb

CREATE TABLE child(id INT, parent_id INT,

INDEX par_ind (parent_id),

FOREIGN KEY (parent_id) REFERENCES parent(id)

ON DELETE CASCADE

) TYPE=INNODB;

向parent插入數據后,向child插入數據,插入時,child中的parent_id的值只能是parent中有的數據,否則插入不成功;

刪除parent記錄時,child中的相應記錄也會被刪除;-->因為: on delete cascade

更新parent記錄時,不給更新;-->因為沒定義,默認采用restrict.

4.2

若child如下:

mysql>

create table child(id int not null primary key auto_increment,parent_id int,

index par_ind (parent_id),

constraint fk_1 foreign key (parent_id) references

parent(id) on update cascade on delete restrict)

type=innodb;

用上面的:

1).

則可以更新parent記錄時,child中的相應記錄也會被更新;-->因為: on update cascade

2).

不能是子表操作,影響父表.只能是父表影響子表.

3).

刪除外鍵:

alter table child drop foreign key fk_1;

添加外鍵:

alter table child add constraint fk_1 foreign key (parent_id) references

parent(id) on update restrict on delete set null;

(5) 多個外鍵存在:

product_order表對其它兩個表有外鍵。

一個外鍵引用一個product表中的雙列索引。另一個引用在customer表中的單行索引:

CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,

price DECIMAL,

PRIMARY KEY(category, id))?TYPE=INNODB;

CREATE TABLE customer (id INT NOT NULL,

PRIMARY KEY (id)) TYPE=INNODB;

CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,

product_category?INT NOT NULL,

product_id INT NOT NULL,

customer_id INT NOT NULL,

PRIMARY KEY(no),

-- 雙外鍵

INDEX (product_category, product_id),

FOREIGN KEY (product_category, product_id)

REFERENCES product(category, id)

ON UPDATE CASCADE ON DELETE RESTRICT,

-- 單外鍵

INDEX (customer_id),

FOREIGN KEY (customer_id)

REFERENCES customer(id)) TYPE=INNODB;

(6) 說明:

1.若不聲明on update/delete,則默認是采用restrict方式.

2.對于外鍵約束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

總結

以上是生活随笔為你收集整理的mysql外键约束脚本_如何在MySQL中设置外键约束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九色91porny| 久久人爽 | 日本午夜精品理论片a级app发布 | 日韩视频在线播放 | 大吊av | 亚洲AV成人无码久久精品巨臀 | 成人在线免费网站 | 女人的洗澡毛片毛多 | 毛片大全免费看 | 男女天堂av| 成人欧美精品一区二区 | 欧美黑人精品一区二区 | 在线免费观看av不卡 | 天堂中文字幕在线观看 | 亚洲图片欧美在线看 | 国产国拍精品亚洲 | 国产伦理一区二区 | 看个毛片 | 欧美嫩草 | 欧美一级片网站 | 影音先锋男人资源网站 | 成年免费视频黄网站在线观看 | 色久av| 色综合av | 久久艹影院 | 男女午夜爽爽爽 | 香蕉视频18 | 国产乱子一区二区 | 亚洲欧洲日韩国产 | 爱情岛论坛自拍亚洲品质极速最新章 | 毛片基地在线播放 | 91精品福利 | 96精品在线| 末发成年娇小性xxxxx | 九九九九精品 | 亚洲激情视频 | 精品女同一区二区 | 美女又黄又免费 | 性爱视频在线免费 | 亚洲天堂av女优 | 一区二区三区久久久 | 日韩精品一二三四 | 少妇按摩一区二区三区 | 中文字幕自拍 | 成人免费在线看片 | 蜜臀av性久久久久蜜臀av麻豆 | 久草免费福利视频 | 黄色在线播放网站 | 成人美女在线观看 | 91网址入口 | 在线色资源| 午夜a区| 国产香蕉尹人视频在线 | 亚洲一二区 | 色欲国产精品一区二区 | 欧美a v在线播放 | 国产福利91精品一区二区三区 | 久久精品久久精品久久精品 | 一区二区三区在线 | 成人区人妻精品一区二区不卡视频 | 亚洲精品一区久久久久久 | 丰满少妇影院 | 欧美www | 日韩免费精品 | aaa一区二区| 国产4区| 美足av | www在线观看免费视频 | 国产情侣一区二区 | 国产精品成人无码 | 尤物videos另类xxxx| 国产农村妇女毛片精品 | 日本wwww视频 | 野花成人免费视频 | 快播在线视频 | 久久免费福利 | 亚洲AV无码成人精品区东京热 | 免费av一级片 | www.精品| 欧美激情视频在线播放 | 欧美一区二区三区婷婷 | 一区二区三区精品国产 | 韩国日本中文字幕 | 日韩国产综合 | 欧美 日韩 人妻 高清 中文 | 亚洲国产精品欧美久久 | 婷婷午夜天 | 女性裸体瑜伽无遮挡 | www.蜜臀av.com| 激情欧美一区二区三区 | av午夜影院| 欧美第二区 | 免费av免费看 | 色 综合 欧美 亚洲 国产 | 美攻壮受大胸奶汁(高h) | 欧美另类一区二区 | 日日射日日干 | 国产欧美一区二区在线 | 亚洲福利视频导航 |