【发布时间】:2020-05-09 18:45:29
【问题描述】:
将枚举字段添加到现有表后,我在 mysql 重新启动时收到以下错误。锁定表并仅修复完整的数据库还原问题,因为我也无法删除表。
Error Code: 1932. Table 'users' doesn't exist in engine
我的表格和数据如下:
CREATE TABLE `users` (
`id` char(36) NOT NULL,
`name` varchar(191) NOT NULL,
`email` varchar(191) NOT NULL,
`password` varchar(191) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
INSERT INTO `users` VALUES
(
'11111111-1111-1111-1111-111111111111',
'John Doe',
'user@email.com',
'password',
NOW(),
NOW()
);
上面的表格一直有效,直到下面的行被执行并且mysql被重新启动。
ALTER TABLE users ADD `role` enum('test1', 'test2') AFTER `password`
我还对a前后的表结构做了一个diff。仅添加注释行并锁定表格。
CREATE TABLE `users2` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`role` enum('test1','test2') COLLATE utf8mb4_unicode_ci DEFAULT NULL, -- only diff
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users1_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
这就是奇怪的地方。下面的行将角色添加到表的末尾并且不锁定表。
ALTER TABLE users ADD `role` enum('test1', 'test2'); -- AFTER `password`
似乎 AFTER 是问题所在。如果我尝试不同的位置也没关系。
任何建议将不胜感激。
【问题讨论】:
-
什么版本的 MySQL 或 MariaDB?
-
我很困惑——你问的是“锁定”桌子吗?还是关于 1932 年的错误?在
ALTER...AFTER...之后或ALTER ... (on end)之后是否出现错误?