簡體   English   中英

MySql - 錯誤代碼:1932。引擎中不存在表

[英]MySql - Error Code: 1932. Table doesn't exist in engine

在向現有表中添加枚舉字段后,我在重新啟動 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`

我還對前后的表結構做了一個差異。 僅添加帶有注釋的行並鎖定表。

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 是問題所在。 如果我嘗試不同的位置也沒關系。

任何建議,將不勝感激。

您還可以在添加列時分配默認值。

ALTER TABLE users ADD `role` enum('test1', 'test2') DEFAULT 'test1' AFTER `password`;

因此,不允許使用 NULL 值,所有行都將分配給'test1'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM