【发布时间】:2013-02-14 10:03:34
【问题描述】:
为什么我会收到表单错误:
Error in query: Duplicate entry '10' for key 1
...当执行如下 INSERT 语句时:
INSERT INTO wp_abk_period (pricing_id, apartment_id) VALUES (13, 27)
...13 和 27 是现有 pricing 和 apartment 行的有效 id-s,表定义为:
CREATE TABLE `wp_abk_period` (
`id` int(11) NOT NULL auto_increment,
`apartment_id` int(11) NOT NULL,
`pricing_id` int(11) NOT NULL,
`type` enum('available','booked','unavailable') collate utf8_unicode_ci default NULL,
`starts` datetime default NULL,
`ends` datetime default NULL,
`recur_type` enum('daily','weekly','monthly','yearly') collate utf8_unicode_ci default NULL,
`recur_every` char(3) collate utf8_unicode_ci default NULL,
`timedate_significance` char(4) collate utf8_unicode_ci default NULL,
`check_in_times` varchar(255) collate utf8_unicode_ci default NULL,
`check_out_times` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
KEY `fk_period_apartment1_idx` (`apartment_id`),
KEY `fk_period_pricing1_idx` (`pricing_id`),
CONSTRAINT `fk_period_apartment1` FOREIGN KEY (`apartment_id`) REFERENCES `wp_abk_apartment` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_period_pricing1` FOREIGN KEY (`pricing_id`) REFERENCES `wp_abk_pricing` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
在这种情况下,key 1id 和 auto_increment 上是否足以不指定它?
注意:如果我只是为id 提供一个未使用的值,例如INSERT INTO wp_abk_period (id, pricing_id, apartment_id) VALUES (3333333, 13, 27),它可以正常工作,但话又说回来,它被设置为auto_increment,所以我不需要这样做!
注意 2:好的,这是一个完整的“暮光之城”时刻: 所以在运行上面的查询后,使用大量的 id,事情开始正常工作,不再是 duplicate entry errors . 谁能解释一下,WTF 是 MySQL 是为了产生这种奇怪的行为吗?
【问题讨论】:
-
这张表上有 INSERT 触发器吗?
-
不(或者至少我不这么认为)。我用上面的 create 语句自己创建了所有表。
show create table wp_abk_period的输出在上面列出,show triggers没有返回任何内容......另外,如果我只是为id提供一个未使用的值,它工作正常......