You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL错误1062排查:admin_menu表主键重复插入问题

MySQL ERROR 1062 (23000) 主键重复问题解决

问题原因

admin_menu表的id字段是主键(建表语句中的AUTO_INCREMENT隐含其为主键属性),主键值必须唯一。执行插入语句时,尝试插入id=1的记录,但表中已存在该主键值的记录,因此触发重复键错误。

解决方法

1. 跳过重复记录,保留现有数据

修改INSERT语句,添加ON DUPLICATE KEY UPDATE子句,遇到主键重复时可选择跳过或更新现有记录:

  • 仅跳过重复记录(不做任何更新):
INSERT INTO `admin_menu` (`id`, `parent_id`, `order`, `title`, `icon`, `uri`, `permission`, `created_at`, `updated_at`) VALUES
(1, 0, 1, 'Dashboard', 'fa-bar-chart', '/', NULL, NULL, NULL),
(2, 0, 2, 'Admin', 'fa-tasks', '', NULL, NULL, NULL),
(3, 2, 3, 'Users', 'fa-users', 'auth/users', NULL, NULL, NULL),
(4, 2, 4, 'Roles', 'fa-user', 'auth/roles', NULL, NULL, NULL),
(5, 2, 5, 'Permission', 'fa-ban', 'auth/permissions', NULL, NULL, NULL),
(6, 2, 6, 'Menu', 'fa-bars', 'auth/menu', NULL, NULL, NULL),
(7, 2, 7, 'Operation log', 'fa-history', 'auth/logs', NULL, NULL, NULL),
(8, 0, 0, 'Food Category', 'fa-certificate', '/food-types', '*', '2021-11-08 04:58:13', '2022-01-01 00:16:59'),
(10, 0, 0, 'Users', 'fa-bars', '/users', '*', '2021-11-08 05:38:59', '2021-11-08 05:38:59'),
(11, 0, 0, 'Food', 'fa-beer', '/foods', '*', '2021-11-17 01:37:06', '2022-01-01 00:06:15'),
(12, 0, 0, 'Orders', 'fa-first-order', '/orders', '*', '2022-02-09 18:27:25', '2022-02-09 18:27:25'),
(13, 0, 0, 'Payment Setting', 'fa-dollar', '/business-settings', '*', '2022-02-27 22:24:23', '2022-02-27 22:24:23')
ON DUPLICATE KEY UPDATE id=id;
  • 若需更新重复记录的字段(例如更新updated_at和title):
ON DUPLICATE KEY UPDATE updated_at=VALUES(updated_at), title=VALUES(title);

2. 清空表后重新插入数据

如果表中现有数据无需保留,可先清空表再执行插入:

TRUNCATE TABLE `admin_menu`;
-- 执行原INSERT语句

TRUNCATE会清空表并重置自增计数器,适合完全重建数据的场景。

3. 删除重复主键记录后插入

先查询并删除已存在的id=1记录,再执行插入:

-- 查询是否存在重复记录
SELECT * FROM `admin_menu` WHERE id=1;
-- 删除重复记录
DELETE FROM `admin_menu` WHERE id=1;
-- 执行原INSERT语句

建表语句优化建议

建表时显式声明id为主键,使表结构更清晰:

CREATE TABLE IF NOT EXISTS `admin_menu` (
  `id` int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `parent_id` int NOT NULL DEFAULT '0',
  `order` int NOT NULL DEFAULT '0',
  `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

内容的提问来源于stack exchange,提问作者Mostafa Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:55:19