REPLACE INTO

简介

在数据库中,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)

PK不冲突 UK不冲突 binlog (insert)

注意事项

  • 插入数据的表必须有主键或者是唯一索引,否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据;
  • 如果数据库里边有这条记录,则直接修改这条记录;如果没有则,则直接插入,在有外键的情况下,对主表进行这样操作时,因为如果主表存在一条记录,被从表所用时,直接使用replace into是会报错的,这和replace into的内部原理是相关(先删除然后再插入);
  • 频繁的REPLACE INTO 会造成新纪录的主键的值迅速增大。总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了;
  • replace操作在自增主键的情况下(表中有自增主键时),某些情况冲突时执行的是delete+insert,但是在记录binlog时,却记录成了update操作,update操作不会涉及到auto_increment的修改。备库应用了binlog之后,备库的表的auto_increment属性不变。如果主备库发生主从切换,备库变为原来的主库,写新的主库则有风险发生主键冲突。

你可能感兴趣的:(数据库,sql,数据库,oracle)