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...