微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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`)
  ;

或选择另一列

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。