我正在尝试按如下方式更改表格。但我收到一个错误代码:
1834 无法从表下载的外键约束“downloads_ibfk”中的父表中删除行。
ALTER TABLE users
MODIFY first_name VARCHAR(20) NOT NULL UNIQUE;
我正在尝试按如下方式更改表格。但我收到一个错误代码:
1834 无法从表下载的外键约束“downloads_ibfk”中的父表中删除行。
ALTER TABLE users
MODIFY first_name VARCHAR(20) NOT NULL UNIQUE;
您显然有一个外键约束阻止了 ALTER TABLE。
您可以通过在查询前使用
SET FOREIGN_KEY_CHECKS=0;
但请记住在查询后将其设置回 1。
SET FOREIGN_KEY_CHECKS=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
算法及其支持的操作的更多信息。