重命名一些表后,出现以下错误:
MariaDB [testdb]> INSERT INTO user_events (date, uid, operation, info) VALUES('2022-09-15','xyz','create',NULL);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails `testdb`.`user_events`, CONSTRAINT `user_events_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `associations` (`uid`))
原因是需要将里面的associations
表REFERENCES
改成users
.
实现这一目标的最简单方法是什么?
您可以遵循三个步骤。
1. Identify the foreign keys names from the tables
在您的示例
show create table user_events
中,将给出外键名称。您可以使用以下查询找到架构的所有外键名称:
2. Drop the foreign key constraint
如果您的表引擎是Innodb ,请使用以下查询删除外键:
3. Recreate the foreign key constraint
注意。第 2 步和第 3 步可以合并为一个查询,但外键名称必须与删除的名称不同
对里克评论的回应
来自 docs Online DDL 限制
在没有锁定表的情况下面临的错误(并非总是如此),大部分时间发生在大表上,这将导致 alter 语句失败:
为防止这种情况,请使用上述正确的锁定语法