Mysql FOREIGN KEY Constraints

本文详细介绍了InnoDB引擎中的外键约束定义及其工作原理。包括外键的创建要求、不同约束选项(如RESTRICT、CASCADE等)的效果,以及如何在不同场景下使用这些选项来维护数据库的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InnoDB 支持 foreign key constraints.

constraint definition in InnoDB looks like this:

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

在InnoDB引擎中,

1.constranint [symbol] 中symbol如果指定必须唯一。

2.要建立外键,必须对外键和它参照的列上建立索引。

3.外键可以参照一列或几列,并且参照的列和外键可以是在不同的表中,也可以是同一个表。

可选择的外键约束种类有,RESTRICT | CASCADE | SET NULL | NO ACTION 四种。

外键约束对子表的含义:
   如果在父表中找不到候选键,则不允许在子表上进行insert/update

外键约束对父表的含义:
   在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,

父表的行为取决于:在定义子表的外键时指定的on update/on delete子句,

InnoDB支持4种方式, 分列如下 
   . cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录,

Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.  
Note:cascaded foreign key actions do not activate triggers
   . set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能设置为not null。

Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported. 
 
   . Restrict方式

拒绝在父表上的删除或更新,此时如果我们将忽略其他定义在其上的约束如(ON DELETE or ON UPDATE clause)

  . No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
这个是ANSI SQL-92标准,从mysql4.0.8开始支持

在Mysql 中 Restrict  和No action 的意义是一样的。

参见 Mysql Manual:  Foreign Key constraint

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值