mysql 中不能關聯外來鍵 mysql 外來鍵關聯

2021-10-17 13:40:04 字數 2158 閱讀 6357

mysql 外來鍵關聯

什麼是外來鍵:

外來鍵是乙個特殊的索引,用於關聯兩個表,只能是指定內容。

如我將新建乙個daka的表,然後將此表的class_id 與另外乙個class的表的cid欄位關聯

class表:

create table `class` (

`cid` int(11) not null auto_increment,

`caption` varchar(32) not null,

primary key (`cid`)

) engine=innodb auto_increment=6 default charset=utf8;

mysql> select * from class;

| cid | caption |

| 1 | 高二1班 |

| 2 | 高二2班 |

| 3 | 高二3班 |

| 4 | 高二4班 |

| 5 | 高二5班 |

daka表:

create table `daka` (

`id` int(11) auto_increment not null,

`student_name` char(16) not null,

`state` enum("y","n") not null,

`class_id` int(11) not null,

primary key (`id`),

constraint `fk_class_key` foreign key (`class_id`) references `class` (`cid`)

#fk_class_key 這個表示這個外來鍵約束名稱,自定義的,此時在

開始往daka表中插入資料,(此時在class_id欄位中的值,就必須在class表中的cid欄位中要存在如果不存在則會報錯,被外來鍵約束)

正常:mysql> insert into `daka` (student_name,state,class_id) values("趙麗穎","y","3");

query ok, 1 row affected (0.04 sec)

報錯:mysql> insert into `daka` (student_name,state,class_id) values("趙麗穎","y","6");

error 1452 (23000): cannot add or update a child row: a foreign key constraint fails (`newtest`.`daka`, constraint `fk_class_key` foreign key (`class_id`) references `class` (`cid`))

在刪除的資料的過程中,如果是刪除daka表中有外來鍵約束的資料則沒有問題,但是如果是刪除class表中被外來鍵關聯的資料則就會報錯,

如下:mysql> select * from daka;

| id | student_name | state | class_id |

| 1 | 趙麗穎 | y | 3 |

| 8 | 趙麗穎1 | y | 5 |

2 rows in set (0.00 sec)

mysql> select * from class;

| cid | caption |

| 1 | 高二1班 |

| 2 | 高二2班 |

| 3 | 高二3班 |

| 4 | 高二4班 |

| 5 | 高二5班 |

5 rows in set (0.00 sec)

mysql> delete from daka where id=8;

query ok, 1 row affected (0.08 sec)

mysql> delete from class where cid=3;

error 1451 (23000): cannot delete or update a parent row: a foreign key constraint fails (`newtest`.`daka`, constraint `fk_class_key` foreign key (`class_id`) references `class` (`cid`))

此處cid=3的這行資料被外來鍵關聯了,daka表中有引用他,所以不能直接被刪除。

MySQL 外來鍵關聯策略

eg.乙個使用者可有擁有多個訂單,乙個訂單只能屬於乙個使用者,一對多,在tb order中使用外來鍵user id關聯tb user的id。當刪除 更新tb user中的主鍵時,與之關聯的tb order要受到影響,比如 tb user中的一條記錄 1chy abcd tb order中一條記錄,1...

mysql外來鍵關聯得外表得列 Mysql外來鍵得使用

一 基本概念 1 mysql中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引,innodb不能自動地建立索引。2 外來鍵可以是一對一的,乙...

深入mysql外來鍵關聯問題的詳解(中)

如下 mysql update country set country id 100 where country id 1 error 1451 23000 cannot delete or update a parent row a foreign key constraint fails tes...