REPLACE INTO,它是否重新使用PRIMARY KEY?

mat*_*att 14 mysql sql duplicates sql-insert sql-delete

REPLACE INTOMySQL中的函数以删除和插入行的方式工作.在我的表中,主键(id)是自动递增的,所以我期望它删除然后id在数据库的尾部插入一个表.

但是,它出乎意料并插入相同的id!这是预期的行为,还是我在这里遗漏了什么?(我id在调用REPLACE INTO语句时没有设置)

hol*_*hol 14

如果您UNIQUE的表中有另一个索引,则必须具有此预期行为,否则它将按预期添加行.查看文档:

REPLACE与INSERT的工作方式完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行.请参见第13.2.5节"INSERT语法".

https://dev.mysql.com/doc/refman/5.5/en/replace.html

这真的很有意义,因为mySQL会如何找到要替换的行?它只能扫描整个表格,这将非常耗时.我创建了一个SQL Fiddle来演示这个,请看这里

  • OP指定他没有为`id`列提供值.如果语句为`id`列提供了值,那么是的,我们希望该值被"重用".但是如果没有提供值,我们期望正常的AUTO_INCREMENT行为. (2认同)