Mysql外键的应用

我们建立外键还有一个要求便是两个表的类型必须是InnoDB的才行。

表2中的外键aa_id指向的是表1中的id。

表2对于外键中存储数据时要求表1中的主键必须存在。

外键的类型:

        1. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。

(修改父表主键被拒绝,因为子表外键设置为Restrict)

        2. NO ACTION: InnoDB拒绝删除或者更新父表。

 

       3. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

步骤一


         4. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET NULL都被InnoDB所支持。

 


       5. SET DEFAULT: InnoDB目前不支持。


上述中NO ACTION 和RESTRICT表面看起来是一样的,restrict是在修改或者删除之前去检查从表中是否有对应的数据,如果有,拒绝操作,而no action这个是ANSI SQL-92标准,从mysql4.0.8开始支持,在有些数据库中,会延迟检查,即在修改或者删除完以后去检查从表中是否有对应的数据,如果有,拒绝操作,但是在MySQL中,外键约束都会立即检查,所以两者等价。需要注意的是,set default只是MySQL 解析器认可,但是InnoDB和NDB 拒绝在定义表时,出现ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT 语句。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值