下面的示例測試,針對cascade方式。
現在需要儲存學校和學生資訊,建立學校表school,學生表student. 字段如下
表名字段
型別school
school_id
varchar
school_name
varchar
student
stu_id
intstu_name
varchar
school_id
varchar
需要達到的效果:
create
table
`school`
(`school_id`
varchar
(255
)not
null
,`school_name`
varchar
(255
)default
null
,primary
key(
`school_id`))
engine
=innodb
default
charset
=utf8
create
table
`student`
(`stu_id`
int(10)
notnull
auto_increment
,`stu_name`
varchar
(255
)default
null
,`school_id`
varchar
(255
)default
null
,primary
key(
`stu_id`),
key`school_id`
(`school_id`),
constraint
`student_ibfk_1`
foreign
key(
`school_id`
)references
`school`
(`school_id`)on
delete
cascade
onupdate
cascade
)engine
=innodb
default
charset
=utf8
insert
into
`school`
(`school_id`
,`school_name`
)values
('xiwang_xiaoxue'
,'希望小學'
);
insert
into
`student`
(`stu_id`
,`stu_name`
,`school_id`
)values(1
,'小明'
,'test_xiaoxue'
);
報錯,因為值為test_xiaoxue
的school_id
在school
中不存在,達到需求中效果1要求。
1452 - cannot add or update a child row: a foreign key constraint fails (`szw`.`student`, constraint `student_ibfk_1` foreign key (`school_id`) references `school` (`school_id`) on delete cascade on update cascade)
*student
表插入兩條資料
insert
into
`student`
(`stu_id`
,`stu_name`
,`school_id`
)values(1
,'小明'
,'xiwang_xiaoxue');
insert
into
`student`
(`stu_id`
,`stu_name`
,`school_id`
)values(2
,'小華'
,'xiwang_xiaoxue'
);
+----------+------------+-------------------+
| stu_id | stu_name | school_id |
|----------+------------+-------------------|
| 1 | 小明 | xiwang_xiaoxue |
| 2 | 小華 | xiwang_xiaoxue |
+----------+------------+-------------------+
update school set school_id=
'yangguang_xiaoxue'
where school_id=
'xiwang_xiaoxue'
;
+----------+------------+-------------------+
| stu_id | stu_name | school_id |
|----------+------------+-------------------|
| 1 | 小明 | yangguang_xiaoxue |
| 2 | 小華 | yangguang_xiaoxue |
+----------+------------+-------------------+
delete
from school where school_id=
'yangguang_xiaoxue'
;
> select * from student;
+----------+------------+-------------+
| stu_id | stu_name | school_id |
|----------+------------+-------------|
+----------+------------+-------------+
0 rows in set
以上是外來鍵的簡單應用示例。
刪除表時注意:
此時,直接刪除school
表會報錯誤。需要先刪除student
表,才能刪除school
表
1217 - cannot delete or update a parent row: a foreign key constraint fails
mysql 外來鍵 del 記錄 MySQL 外來鍵
在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...
mysql外來鍵教程 MySQL外來鍵使用詳解
最近有開始做乙個實驗室管理系統,因為分了幾個表進行儲存 所以要維護表間的關聯 研究了一下mysql的外來鍵 1 只有innodb型別的表才可以使用外來鍵,mysql預設是myisam,這種型別不支援外來鍵約束 2 外來鍵的好處 可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作 3 外來鍵的作用...
mysql是否推薦使用外來鍵 MySQL 外來鍵使用
mysql 外來鍵使用 外來鍵的使用條件 1.兩個表必須是innodb表,myisam表暫時不支援外來鍵 據說以後的版本有可能支援,但至少目前不支援 2.外來鍵列必須建立了索引,mysql 4.1.2以後的版本在建立外來鍵時會自動建立索引,但如果在較早的版本則需要顯示建立 3.外來鍵關係的兩個表的列...