在我的 AWS RDS Mysql 8.0.16 服务器上,我有一个 DB ( my-db
) 和 2 个用户:master
用户(由 RDS 自动创建)和我创建的应用程序用户:
create user if not exists `appuser`@`%` identified by 's3cr3t';
grant all on `my-db`.* to `appuser`@`%`;
当我delete from Things where id = 123
代表 运行查询时appuser
,我得到的错误消息是:
[23000][1217] 无法删除或更新父行:外键约束失败
(1217并且没有约束细节)
当我以主用户身份运行相同的查询时,错误消息是:
[23000][1451] 无法删除或更新父行:外键约束失败 (
my-db
.Sandwiches
, CONSTRAINTSandwichesThingIdFK
FOREIGN KEY (thingId
) REFERENCESThings
(id
))
(1451还有约束细节)
如何appuser
获取 1451 和所有详细信息?
看起来这个问题特定于 Mysql 8.0.16。我已经升级到 8.0.21,现在按预期得到 1451。
更长的答案:1217 (
ER_ROW_IS_REFERENCED
) 和 1451 (ER_ROW_IS_REFERENCED_2
) 都描述了相同的情况。据我了解,如果用户对感兴趣的表有REFERENCES
权限,Mysql 将使用 1451 ,否则使用 1217。这是关于 1216 (ER_NO_REFERENCED_ROW
) 与 1452 (ER_NO_REFERENCED_ROW_2
) 的相同故事。