无法删除 MariaDB 表中的字段
Posted
技术标签:
【中文标题】无法删除 MariaDB 表中的字段【英文标题】:Not able to drop field in MariaDB table 【发布时间】:2021-04-04 23:41:39 【问题描述】:我有表 my_transitions
,我正在尝试删除名为 myStage
的字段。
我正在使用这个命令:
alter table `my_transitions` drop `myStage`
我看到了这个错误:
Key column 'myStage' doesn't exist in table
但是当我使用此命令列出所有字段时:
describe my_transitions
我可以看到
id bigint(20) unsigned NO PRI NULL auto_increment
myStage varchar(255) NO MUL NULL
updated_at timestamp YES NULL
任何人都可以看到我是否做错了什么?
编辑:
如果我运行show create table my_transitions;
,我会得到:
CREATE TABLE `my_transitions` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`myStage` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`myStage1` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_stage_combination` (`myStage`,`myStage1`),
KEY `my_transitions_myStage` (`myStage`),
KEY `my_transitions_myStage1` (`myStage1`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
【问题讨论】:
这能回答你的问题吗? Key column doesn't exist in table 不,它没有。我确实在表中有该字段:/ 该错误在尝试错误定义外键时很常见,但在尝试删除列时则不然。我相信错误来自另一个语句,而不是您删除该列的更改表。 我直接在 db 中对上述 alter table 查询进行了测试,它来自那里 我已经测试过,一切看起来都不错。您使用的是哪个版本。我在 mariadb 10.2.8 中发现了这个问题,请参阅:jira.mariadb.org/browse/MDEV-13613 当字段是键的一部分时 【参考方案1】:我已经通过首先删除唯一键来解决它
ALTER TABLE my_transitions DROP INDEX unique_stage_combination;
如果列是 Maria DB 10.5.8 中索引键的一部分,则似乎无法删除该列。
【讨论】:
【参考方案2】:这是 MariaDB 中的一个特殊错误。它会影响 MariaDB 10.5。
演示:https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=867204670347fa29e40bd5eb510c6956
解决方法是先删除列 mystage
所属的唯一键,然后删除该列。
alter table my_transitions drop key unique_stage_combination, drop column mystage;
P.S.:我在 mysql 8.0 上对此进行了测试,它不需要解决方法。它确实删除了该列,但它只在一个列 mystage1
上留下了一个 UNIQUE KEY 列,这可能不是您想要的。
【讨论】:
在存在外键时未成功测试您的解决方法***.com/questions/68286706/…以上是关于无法删除 MariaDB 表中的字段的主要内容,如果未能解决你的问题,请参考以下文章