【发布时间】:2011-07-16 09:04:22
【问题描述】:
会不会发生 MySQL 两次生成相同的自动增量 ID 的情况?
我们有以下情况:
创建了一个 id=100 的账单;
然后就被删除了;
然后创建了另一个账单,它具有相同的 id = 100;
表的结构是:
CREATE TABLE `bill` (
`id` int(11) NOT NULL auto_increment,
`user` int(11) NOT NULL,
`date` datetime NOT NULL,
`state` int(11) NOT NULL,
`adv` bit(1) NOT NULL default b'0',
`weight` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `FK2E2407EC768806` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `bill`
ADD CONSTRAINT `FK2E2407EC768806` FOREIGN KEY (`user`) REFERENCES `user` (`id`);
可能存在一些竞争条件或 MySQL 是否保证唯一的自动增量 ID?
更新:我们无法重现这种情况,但我们记录了它。
【问题讨论】:
-
你已经登录了是什么意思?它是否表明这确实发生了?你能告诉我们吗?
-
账单创建后,在外部支付系统中还创建了另一个具有相同ID的账单,并且该系统显示有两个具有重复ID的账单。
-
账单的 ID 是否也从支付系统插入到数据库中?因为 MySQL 不应该在自动增量字段上生成重复的 ID - 即使某些 ID 已被删除(除非您截断表)。
标签: mysql auto-increment