【发布时间】:2010-12-09 16:43:37
【问题描述】:
我有一个表 User,它在静态 hasMany 下的 User 类中定义了许多子表 圣杯。
在 grails 中执行 User.get(3).delete() 时没有问题。它会自动删除该用户及其所有子表行。 但是当我想在 MySQL 工作台中执行相同的操作时。我得到 MySQL 抛出的错误:
ERROR 1451: Cannot delete or update a parent row: a foreign key constraint fails (`test_db`.`search_stat`, CONSTRAINT `FK7A3CFFB6E64DB41` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))
SQL Statement:
DELETE FROM `test_db`.`user` WHERE `id`='3'
我不知道 MySQL 有什么问题。
【问题讨论】:
-
查看MySQL中表的定义。外键是否设置了“ON DELETE CASCADE”,或者 GORM/Hibernate 是否在幕后代码中进行级联?
-
我在 MYSQL 工作台中检查过,但在 Foreing Keys 选项卡下它没有显示任何外键。其下的 Foreing Key Names 和 Reference Table 选项卡为空白。当我单击空白时,它会自动创建 fk_user_1 并单击下一个选项卡,下拉菜单显示数据库中的所有表,供我选择一个作为引用表。但我认为出了点问题,我不需要重新创建外键。我尝试在 mysql 命令行版本中删除命令,我得到了同样的错误。
-
另一方面,Grails GORM 文档清楚地表明,belongsTo 会在删除/更新行为时自动创建级联。因此,当 GORM 在 MySQL db 中创建表时,这种行为应该已经进入 db 模式。
标签: mysql grails grails-orm mysql-error-1451