如何 drop 有 foreign key 的 mysql table?

父子表定义

一张 “订单表 Orders” 中有一个字段 “customer_id” 顾客id,指向顾客表 (Customers) 的主键(id字段),那么 顾客表就叫做“父表”或“被引用表”,而顾客表被称为“子表”或“引用表”。

当 drop 父表时,必须先删除掉“子表”,否则 mysql 会报告:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

如果两张表互相之间相互引用,那么无论用什么删除顺序都无法删除表。

这时可以用设置变量 “” 的方式来解决,即告诉 MySQL 不要检查外键约束了。

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

Grails 的 dbCreate 属性

当 Grails 的 dbCreate 设置为 “create-drop” 的时候,正常情况下启动 Grails 时数据库表都能被 drop 并重新创建一遍,但是如果有这些外键关系存在时会导致 drop 失败,也就无法重新建表,导致 表结构 不能正确更新。

需要手工按照上面的方法删除 table 后重新启动。

参考资料

mysql 外键介绍

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值