mysql外來鍵使用記錄

2021-10-05 23:16:49 字數 3709 閱讀 6313

下面的示例測試,針對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_xiaoxueschool_idschool中不存在,達到需求中效果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.外來鍵關係的兩個表的列...