Mysql - 具有自动增量的键的重复输入错误

标签 mysql sql database

为什么会出现以下形式的错误:

查询错误:键 1 的重复条目“10”

...当执行 INSERT 语句时:

INSERT INTO wp_abk_period (pricing_id, apartment_id) VALUES (13, 27)

...其中 13 和 27 是现有 pricingapartment 行的有效 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 1 id 并且在 auto_increment 上设置它是否足以不指定它?

注意:如果我只是为 id 提供一个未使用的值,例如 INSERT INTO wp_abk_period (id, pricing_id, apartment_id) VALUES (3333333, 13, 27) 它有效很好,但话又说回来,它被设置为 auto_increment 所以我不需要这样做!


注意 2:好吧,这是一个完整的“暮光之城”时刻:所以在使用大量 id 运行上面的查询后,事情开始正常工作,不再有重复输入错误谁能解释一下 MySQL 到底在做什么来产生这种奇怪的行为?

最佳答案

可能是您的表的 AUTO_INCREMENT 值和 id 列中的实际值失调了。

这可能有帮助:

第 1 步 - 从表中获取最大 ID

select max(id) from wp_abk_period

第 2 步 - 在表格上对齐 AUTO_INCREMENT 计数器

ALTER TABLE wp_abk_period AUTO_INCREMENT = <value from step 1 + 100>;

第 3 步 - 重试插入

至于为什么 AUTO_INCREMENT 失控了,我不知道。在表中有数据后添加 auto_increment?插入数据后更改了 auto_increment 值?

希望对您有所帮助。

关于Mysql - 具有自动增量的键的重复输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14872215/

相关文章:

mysql - 为什么两个sql给出不同的结果?

MySQL 避免在 CurrentTimeStamp 中重复条目

mysql - 如何使用 MySQL 触发器按操作对数据更改进行分组

c# - 将 MariaDB 与 Entity Framework 结合使用

php - 用于数据过滤的 SQL 查询

mysql - 填写表格或在 mysql 中使用触发器后将 ID 号发送到他们的电子邮件

sql - 在所有查询中都有 TRANSACTION

php - SQL触发器删除异常值

sql - 如何只允许sql中的某些字符(oracle)

database - 在 SymmetricDS 中实现行级安全