MariaDB删除临时表的外键

时间:2018-07-29 11:55:57

标签: mariadb concrete5

上下文:

我正在尝试将具体的安装从版本8.3.2升级到8.4.1。执行此SQL语句期间,升级过程失败:

ALTER TABLE AreaLayoutsUsingPresets ADD CONSTRAINT FK_7A9049A1385521EA FOREIGN KEY (arLayoutID) REFERENCES AreaLayouts (arLayoutID) ON UPDATE CASCADE ON DELETE CASCADE

使用:

SQLSTATE[HY000]: General error: 1005 Can't create table `concrete5`.`#sql-215_264a4` (errno: 121 "Duplicate key on write or update")

调查我的数据库后发现,在information_schema的{​​{1}}中有以下条目:

INNODB_SYS_FOREIGN

问题:

现在我的理解是,我不能修改ID FOR_NAME REF_NAME N_COLS TYPE concrete5/FK_7A9049A1385521EA concrete5/#sql-215_26264 concrete5/AreaLayouts 1 5 ,因为它不是数据库,而只是系统的表格表示形式。

我想知道如何摆脱该外键输入。表information_schema不存在(我无法在服务器上找到它,concrete5/#sql-215_26264alter table也找不到该表(我尝试使用drop table前缀和没有它))。因此,更改表删除外键的直接方法失败了,因为它找不到表。

我想我可能会弄乱升级脚本,以便它创建一个新的外键ID,但是我宁愿摆脱数据库中的那个僵尸。我已经尝试禁用外键检查,然后导致错误,告诉我不能将键添加到系统表中(因为它已经在系统表中了)。

2 个答案:

答案 0 :(得分:0)

重新安装很少能解决任何问题;但我很高兴它解决了您的问题。

诸如#sql_...之类的表名通常来自ALTER或类似DDL中间的崩溃。这样的文件可以删除。 information_schema是通过查看文件得出的,因此我认为删除文件会杀死僵尸条目。

答案 1 :(得分:0)

在SQL导入之前加上SET FOREIGN_KEY_CHECKS=0;

或将其附加到查询ALTER TABLE ... DISABLE KEYS;

...最好在弄乱之前转储整个数据库。