3

我有代码 1451 的 mysql 错误。

无法删除或更新父行:外键约束失败 ( online_store_admin. osa_admin_logs, CONSTRAINT fk_admins_logsFOREIGN KEY ( aid) REFERENCES osa_admins( aid))

这里的sql语句:

如果存在 osa_admins,则删除表;
如果不存在则创建表 osa_admins(
 帮助 int unsigned not null auto_increment,
 uid varchar(50) 不为空,
 通过 char(41) 不为空,
 erp_id int unsigned not null,
 last_login int 无符号不为空,
 is_block tinyint unsigned not null,
 菜单 varchar(50) 不为空,
 is_login tinyint unsigned not null,
 ip_login char(15) 不为空,

 使用 btree(aid) 约束 idx_osa_admins 主键
);
插入 osa_admins 值
(NULL, 'root', 密码('6789'), '0', '0', '0', '*', '0', '127.000.000.001'),
(NULL, 'ryu', 密码('6789'), '0', '0', '0', '*', '0', '127.000.000.001');

如果存在 osa_admin_logs,则删除表;
如果不存在则创建表 osa_admin_logs(
 盖子 bigint 无符号不为空,
 帮助 int 无符号不为空,
 日期 int 无符号不为空,
 记录文本不为空,

 使用 btree(lid) 约束 idx_osa_admin_logs 主键,
 约束 fk_admins_logs 外键(辅助)
  参考 osa_admins(aid)
  完全匹配
  在更新级联
  在删除级联
);
插入 osa_admin_logs 值
(NULL, '2', '0', 'some action here'),
(NULL, '2', '0', '再次,这里有一些动作');

当我使用这个语句时问题来了:

从 osa_admins 中删除aid='2';

我想我已经设置了“删除级联”。有谁知道如何删除级联?所以我不需要手动删除 osa_admin_logs 数据。哦,我使用 innodb 作为数据库引擎(我拥有的默认 mysql)。

对不起,我问了同样的问题有答案,只是让我知道我在哪里可以得到我的问题。

谢谢你。

4

2 回答 2

13

使用以下命令执行此操作:

SET foreign_key_checks = 0; 
DELETE FROM your_table_name WHERE your_condition;
SET foreign_key_checks = 1;
于 2013-04-15T09:48:12.743 回答
8

match full从约束中删除

使用显式 MATCH 子句不会产生指定的效果,还会导致 ON DELETE 和 ON UPDATE 子句被忽略。由于这些原因,应避免指定 MATCH。

MySql 文档https://dev.mysql.com/doc/refman/8.0/en/create-table.html

于 2010-12-22T02:38:37.723 回答