在分布式中,数据自增ID机制的原理:数据库自增ID是通过MySQL的replace into实现的。
这个replace into和insert类似,不同点在于:replace into首先尝试插入数据列表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断),则先删除旧数据再插入,否则直接插入新数据。
示例:
- 创建数据表:
CREATE TABLE `tb_test` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(8) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
注意:字段name唯一。
- 执行下面语句往表中插入一条数据
insert into tb_test (name) values ('zhangsan')
- 查看新增记录的ID
SELECT LAST_INSERT_ID()
结果:
- 再次执行第2步中的插入语句,结果报错:
- 执行如下replace into语句插入数据:
replace into tb_test (name) values ('lisi')
-
执行第3步查看id
查看表中的数据
-
再次执行第5步中的replace into语句
-
执行第3步查看id
而查看表中的数据只有两条
多次执行replace into语句,再次查看表中的数据,发现id增加了。