Я получаю сообщение об ошибке ниже при перезапуске mysql после добавления поля enum в мою существующую таблицу. Блокирует таблицу и устраняет только полное восстановление базы данных, так как я не могу удалить таблицу.
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`
Я также сделал 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`
Кажется, что ПОСЛЕ проблемы. Не имеет значения, если я попробую другую позицию.
Любые предложения будут оценены.