如何在mysql的外键列创建Duplicated条目



我创建了一个网站,为您提供有关大学的信息,每个大学都有注册和考试等所以在数据库中我有两列

第一张表是大学:

CREATE TABLE `universities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`views` int(11) NOT NULL DEFAULT 0,
`image` varchar(255) NOT NULL,
`banner` varchar(255) NOT NULL,
`aboutUni` text NOT NULL,
`aboutCity` text NOT NULL,
`localRank` int(5) DEFAULT NULL,
`globalRank` int(3) DEFAULT NULL,
`foundedY` int(4) NOT NULL,
`lang` varchar(10) DEFAULT NULL,
`published` tinyint(1) NOT NULL DEFAULT 1,
`created_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`user_id` int(11) DEFAULT NULL,
`video` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slug` (`slug`),
UNIQUE KEY `title` (`title`),
UNIQUE KEY `slug_2` (`slug`),
KEY `universities_ibfk_1` (`user_id`),
FULLTEXT KEY `title_2` (`title`),
CONSTRAINT `universities_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8

第二个表是EXAMS

CREATE TABLE `bsc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`university_id` int(11) DEFAULT NULL,
`dates` text NOT NULL,
`date_end` date DEFAULT NULL,
`date` date DEFAULT NULL,
`papers` text NOT NULL,
`info` text NOT NULL,
`method` text NOT NULL,
`link` varchar(255) DEFAULT NULL,
`register_link` varchar(255) NOT NULL,
`links` text NOT NULL,
`sort` int(2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `university_id` (`university_id`),
UNIQUE KEY `university_id_2` (`university_id`),
CONSTRAINT `bsc_ibfk_1` FOREIGN KEY (`university_id`) REFERENCES `universities` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4

注意!:这些表还有其他列,但我认为并不重要

university_iduniversities.id有外键关系

问题是,当我想将两项考试添加到大学时,我会出现此错误:

Duplicate entry '39' for key 'university_id'

您在Duplicate entry '39' for key 'university_id'中遇到的问题是由于试图在university_id中存储某个地方已经存在的值,根据某些限制,这是不允许的。

如DDL部分所示

UNIQUE KEY `university_id` (`university_id`)

这种约束是导致该错误的主要原因,因此您需要通过删除该约束

ALTER TABLE `bsc` DROP INDEX `university_id`;

感谢@Tangently,他是第一个在评论中预料到错误的人。

似乎不需要这些密钥:

唯一密钥university_id(university_id(,唯一密钥university_id_2(university_id(,

给定这些键,在这些字段中应该只有不同的值。

最新更新