2

我正在尝试按如下方式更改表格。但我收到一个错误代码:

1834 无法从表下载的外键约束“downloads_ibfk”中的父表中删除行。

ALTER TABLE users
MODIFY first_name VARCHAR(20) NOT NULL UNIQUE;
4

2 回答 2

6

您显然有一个外键约束阻止了 ALTER TABLE。

您可以通过在查询前使用

SET FOREIGN_KEY_CHECKS=0;

但请记住在查询后将其设置回 1。

SET FOREIGN_KEY_CHECKS=1;
于 2013-10-07T09:21:00.820 回答
1

按照@zonzon 的建议,通过停用FOREIGN_KEY_CHECKS,您可能会得到一些意想不到的结果。
该错误也可能是由于初始列架构和不完整的ALTER TABLE查询。

如果你有同样的问题,我是这样解决的:

  • 我的初始列架构是:

    # users.login | varchar(128) | collate utf8_bin | not null;
    ALTER TABLE users ADD login varchar(128) COLLATE 'utf8_bin' NOT NULL;
    
  • 我试图执行的,但没有成功

    ALTER TABLE users CHANGE COLUMN login login varchar(128) NULL DEFAULT NULL;
    # Cannot delete rows from table which is parent in a foreign key constraint '%s' of table '%s'
    
  • 成功执行的操作

    ALTER TABLE Internaute CHANGE COLUMN login login varchar(128) COLLATE 'utf8_bin' NULL DEFAULT NULL;
    # This query is more complete, I indicated the column's `COLLATE`. Otherwise the default collation is applied.
    

为什么我的第一个查询不起作用?

在此查询中,我还更改了排序规则(更改为默认排序规则),所以我认为,我的ALTER TABLE操作使用了COPY算法来处理我的请求。

使用此算法,在某个点执行删除。这就是为什么您可能会Cannot delete rows from table ...ALTER TABLE操作中遇到错误的原因。

默认情况下,这些操作使用阻止删除步骤的ALTER TABLE其他算法(INSTANT或)。INPLACE但是,ALTER TABLE这些其他算法不支持更改列排序规则的操作。

您可以在此处获取有关ALTER TABLE算法及其支持的操作的更多信息。

于 2020-12-30T15:16:30.723 回答