#1062 - 键 'PRIMARY' 的重复条目 '19'
Posted
技术标签:
【中文标题】#1062 - 键 \'PRIMARY\' 的重复条目 \'19\'【英文标题】:#1062 - Duplicate entry '19' for key 'PRIMARY'#1062 - 键 'PRIMARY' 的重复条目 '19' 【发布时间】:2019-07-21 14:38:42 【问题描述】:我在 mysql 5.5.24 版本中有下表
CREATE TABLE IF NOT EXISTS `bookings` (
`booking_id` int(11) NOT NULL ,
`class_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;
INSERT INTO `bookings` (`booking_id`, `class_id`, `user_id`) VALUES
(19, 3, 5),
(21, 6, 5);
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL,
`username` varchar(20) NOT NULL,
`firstname` varchar(20) NOT NULL,
`lastname` varchar(20) NOT NULL,
`email` varchar(30) NOT NULL,
`password` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
INSERT INTO `users` (`user_id`, `username`, `firstname`, `lastname`, `email`, `password`) VALUES
(4, 'another', 'Anne', 'Other', 'another@gmail.com', '1234'),
(5, 'rbirney', 'Rosanne', 'Birney', 'rosanne.birney@gmail.com', '1111');
ALTER TABLE `bookings`
ADD PRIMARY KEY (`booking_id`), ADD KEY `class_id` (`class_id`,`user_id`), ADD KEY `user_id` (`user_id`);
ALTER TABLE `classes`
ADD PRIMARY KEY (`class_id`);
ALTER TABLE `users`
ADD PRIMARY KEY (`user_id`);
ALTER TABLE `bookings`
MODIFY `booking_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=22;
ALTER TABLE `classes`
MODIFY `class_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=11;
ALTER TABLE `users`
MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6;
ALTER TABLE `bookings`
ADD CONSTRAINT `fkBookingClass` FOREIGN KEY (`class_id`) REFERENCES `classes` (`class_id`),
ADD CONSTRAINT `fkBookingUser` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`);
我收到以下消息
#1062 - 键“PRIMARY”的重复条目“19”
有人有什么想法吗?
【问题讨论】:
我的猜测是,作为调试过程的一部分,您运行了两次脚本并且没有清理中间的数据,因此您创建了两条 booking_id 为 19 的记录。 【参考方案1】:在 SQL 中,不允许对主键使用相同的值两次。 (值 = 19) 主键始终是唯一的。
【讨论】:
它比这更笼统。 SQL 标准将主键定义为唯一且不为空。其他数据库实现具有相同的约束。以上是关于#1062 - 键 'PRIMARY' 的重复条目 '19'的主要内容,如果未能解决你的问题,请参考以下文章
[23000][1062] 键 'PRIMARY' 的重复条目 '0'