lostars
发布于 2017-09-07 / 1468 阅读
0

MYSQL REPLACE踩坑

Mysql replace关键字类似于insert关键字,不过replace首先会尝试插入一条新的数据,如果抛出异常(检查表的主键和唯一索引)则会删除该条数据,然后再次插入数据,这就是为什么sql执行后会返回2 rows受影响。

如果表的主键和唯一索引同时存在,则会导致主键增长过快,且如果replace的数据存在,如果replace字段没有覆盖所有字段会导致删除数据、新增的时候数据丢失(甚至报错,如果丢失字段非空但又没有默认值的时候)。

之前为了偷懒想着新增修改一条sql就用了replace,但是发现修改数据的时候发现数据丢失,真的是得不偿失。公司项目当时用replace的场景是消息盒子里不同类消息显示最新一条消息,有一张辅助的表来存储最新的消息,这张表没有主键,一个唯一索引,且数据量较大。

细想是没有仔细理解replace导致滥用,现在更深入的了解了之后发现replace慎用,慎用啊!!!