国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MYSQL外鍵約束的學習筆記

2024-07-24 12:39:28
字體:
供稿:網(wǎng)友

MySQL有兩種常用的引擎類型:MyISAM和InnoDB,目前只有InnoDB引擎類型支持外鍵約束了,所以我們?nèi)绻鐾怄I約束就必須是InnoDB引擎了.

在項目中,很多時候我們建數(shù)據(jù)表單的時候,兩個表示相關(guān)聯(lián)的,并且一個表里面的數(shù)據(jù)是完全依賴另一張表的數(shù)據(jù)的.

外鍵約束語法:

  1. [CONSTRAINT [symbol]] FOREIGN KEY 
  2.     [index_name] (index_col_name, ...) 
  3.     REFERENCES tbl_name (index_col_name,...) 
  4.     [ON DELETE reference_option]  --Vevb.com 
  5.     [ON UPDATE reference_option] 
  6. reference_option: 

RESTRICT | CASCADE | SET NULL | NO ACTION  外鍵的使用需要滿足下列的條件:

1.兩張表必須都是InnoDB表,并且它們沒有臨時表。

2.建立外鍵關(guān)系的對應列必須具有相似的InnoDB內(nèi)部數(shù)據(jù)類型。

3.建立外鍵關(guān)系的對應列必須建立了索引。

4.假如顯式的給出了CONSTRAINT symbol,那symbol在數(shù)據(jù)庫中必須是唯一的,假如沒有顯式的給出,InnoDB會自動的創(chuàng)建.

例如:表1:rou_products 表2:rou_pro_images;

ru_products(id,….)是商品信息表,ru_pro_images(id,pro_id,…)是商品相冊表;ru_products與ru_pro_images是1:N關(guān)系;

現(xiàn)在的要求是,當刪除一個商品時,該商品的所有相冊數(shù)據(jù)全部刪掉,有兩種方式:

方式一:在代碼中實現(xiàn),刪除delete from ru_products … 之前先select 該條數(shù)據(jù)的id,然后根據(jù)這個id,刪除ru_images表中.pro_id = id 的數(shù)據(jù);

方式二:在 create  table  ru_images的時候,建立外鍵約束,這樣,在刪除表ru_products的時候,數(shù)據(jù)庫會自動幫我們把ru_images中與ru_products表中刪除的對應數(shù)據(jù)刪除掉,這樣,不僅節(jié)省代碼、減少工作量,更能保障數(shù)據(jù)一致性.

建議外鍵約束具體的操作方式是:

1、建立pro_id字段的索引:ALTER TABLE ru_images ADD INDEX(pro_id);//如果pro_id已經(jīng)添加索引,請忽略此步驟;

2、建議外鍵約束:ALTER TABLE

ru_images ADD CONSTRAINT fk_pro_img FROEIGN KEY(pro_id) REFERENCES ru_products (id) ON DELETE CASCADE;

其中 ON DELETE CASCADE 表示當刪除ru_products的時候,級聯(lián)對ru_images進行刪除;當然,這里還有其他選項可選擇:

[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

CASCADE 表示級聯(lián)操作;SET NULL 表示置空;NO ACTION 表示不進行任何操作;RESTRICT 表示當ru_products中的某個商品,有相冊數(shù)據(jù)的時候,不允許刪除該商品;

其中,在添加外鍵約束的時候,有幾點要注意:

一、添加外鍵的字段必須先建立索引;

二、當數(shù)據(jù)表中有數(shù)據(jù)的時候,可能導致添加外鍵約束失敗.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 商都县| 双江| 城步| 陵水| 灵宝市| 容城县| 山丹县| 惠水县| 湖北省| 唐河县| 乡城县| 纳雍县| 明水县| 彝良县| 丁青县| 庆城县| 台南县| 巴彦淖尔市| 海盐县| 临沭县| 五华县| 喜德县| 政和县| 松阳县| 巢湖市| 晋江市| 丰城市| 隆子县| 连城县| 新和县| 合江县| 临泉县| 白水县| 望奎县| 柞水县| 望奎县| 通州市| 淮南市| 凌海市| 扎囊县| 龙口市|