简介
在数据库中,REPLACE INTO 是一种用于插入或更新数据的(DML) SQL 语句。它与 INSERT INTO 语句类似,但具有一些特殊的行为。
语法
REPLACE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
replace into在binlog中的表现形式
表中只有PK(primary key)
PK冲突 binlog(update)
PK不冲突 binlog(insert)
表中PK(primary key)和UK(unikue key)共存
PK冲突 UK不冲突 binlog(delete+insert)
PK不冲突 UK冲突 binlog(update)
PK冲突 UK冲突 binlog(delete+insert)文章来源:https://www.toymoban.com/news/detail-796859.html
PK不冲突 UK不冲突 binlog (insert)文章来源地址https://www.toymoban.com/news/detail-796859.html
注意事项
- 插入数据的表必须有主键或者是唯一索引,否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据;
- 如果数据库里边有这条记录,则直接修改这条记录;如果没有则,则直接插入,在有外键的情况下,对主表进行这样操作时,因为如果主表存在一条记录,被从表所用时,直接使用replace into是会报错的,这和replace into的内部原理是相关(先删除然后再插入);
- 频繁的REPLACE INTO 会造成新纪录的主键的值迅速增大。总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了;
- replace操作在自增主键的情况下(表中有自增主键时),某些情况冲突时执行的是delete+insert,但是在记录binlog时,却记录成了update操作,update操作不会涉及到auto_increment的修改。备库应用了binlog之后,备库的表的auto_increment属性不变。如果主备库发生主从切换,备库变为原来的主库,写新的主库则有风险发生主键冲突。
到了这里,关于REPLACE INTO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!