问题描述
我有表 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
解决方法
我已经通过先删除唯一键来解决它
ALTER TABLE my_transitions DROP INDEX unique_stage_combination;
如果列是 Maria DB 10.5.8 中索引键的一部分,似乎无法删除该列。
,这是 MariaDB 中的一个特殊错误。它会影响 MariaDB 10.5。
演示:https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=867204670347fa29e40bd5eb510c6956
解决方法是先删除列 mystage
所属的 UNIQUE KEY,然后删除该列。
alter table my_transitions drop key unique_stage_combination,drop column mystage;
P.S.:我在 MySQL 8.0 上对此进行了测试,它不需要解决方法。它确实删除了该列,但它只在列 mystage1
上留下了一个具有 UNIQUE KEY 列的表,这可能不是您想要的。