mysql 添加约束 - #1005 - 无法创建表 ... errno: 121 写入或更新时重复键

问题描述

我一直在扯这个,我确定这是我看不到的小东西......

这是我的 2 个表公司和具有多对多关系的人以及我的数据透视表 company_people :

CREATE TABLE `companies` (
  `id` bigint UNSIGNED NOT NULL,`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`is_active` int NOT NULL DEFAULT '1',`company` varchar(120) CHaraCTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `peoples` (
  `id` bigint UNSIGNED NOT NULL,`firstname` varchar(120) CHaraCTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',`lastname` varchar(120) CHaraCTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '',`company_id` bigint UNSIGNED DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci PACK_KEYS=0;

CREATE TABLE `company_people` (
  `id` bigint NOT NULL,`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`company_id` bigint UNSIGNED NOT NULL,`people_id` bigint UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `companies`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `peoples`
  ADD PRIMARY KEY (`id`),ADD KEY `company_id` (`company_id`);

ALTER TABLE `company_people`
  ADD PRIMARY KEY (`id`),ADD KEY `company_id` (`company_id`),ADD KEY `people_id` (`people_id`);

ALTER TABLE `companies`
  MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT;

ALTER TABLE `peoples`
  MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT;

ALTER TABLE `company_people`
  MODIFY `id` bigint NOT NULL AUTO_INCREMENT;

ALTER TABLE `peoples`
  ADD CONSTRAINT `peoples-company` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `company_people`
  ADD CONSTRAINT `companies-peoples` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `company_people`
  ADD CONSTRAINT `peoples-companies` FOREIGN KEY (`people_id`) REFERENCES `peoples` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

除了最后一条 MysqL 语句出现以下错误外,一切正常:#1005 - 无法创建表 FairTrade.company_people (errno: 121 "Duplicate key on write or update")>

故障在哪里?

解决方法

你有一个错误

ALTER TABLE `companies`
  ADD PRIMARY KEY (`id`),ADD KEY `company_id` (`company_id`);

就这样

错误代码:1072。表中不存在关键列“company_id”

因此删除密钥

ALTER TABLE `companies`
  ADD PRIMARY KEY (`id`)
  ;

或选择另一列