分享

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

 F2967527 2019-11-04
MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

我们在使用 MySQL 数据库时可能会遇到这种情况。如下Students_hobby_t 表,Id字段为唯一索引,当我们使用 INSERT 向 Students_hobby_t 表中写入一条记录,且该条记录的 Id值已存在于表中,则将会抛出主键冲突的错误。

当然,有时候我们需要使用新记录的值来覆盖原来的记录值。如果使用传统的做法,则需要必须先使用DELETE 语句删除原先的记录,然后再使用 INSERT 写入新的记录。

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

REPLACE INTO

除此之外,在MySQL中提供了一种新的解决方案,那就是 REPLACE INTO 语句。使用REPLACE写入一条记录时, 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。否则,直接插入新数据,避免了在同时使用DELETE和INSERT时添加事务等复杂操作了。

在使用REPLACE时,表中必须存在主键索引或唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE将和INSERT完全一样的。

如下,使用REPLACE语句是写入或更新一条记录。

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

使用REPLACE写入或更新多条记录:

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

REPLACE也可以使用 SET 语句写入或更新记录:

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

另外,还支持 REPLACE SELECT 用法,即使用REPLACE SELECT从Students_hobby_o 表中将所有数据导入Students_hobby_t 中。这种用法并不要求列名匹配,只关心字段的位置。

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

如上即为REPLACE INTO语法的三种形式:

  • replace into table(col, …) values(…)
  • replace into table(col, …) select
  • replace into table set col=value, …

除此之外,我们还需要知道。使用 REPLACE写入一条记录后,数据库将返回所影响的行数:

  • 如果返回 1 时,则说明在表中并没有重复的记录。
  • 如果返回 2 时,则说明有一条重复记录,数据库先自动使用 DELETE删除这条记录,然后再使用INSERT 写入新的记录。
  • 如果当返回的值大于2 时,则说明存在多个唯一索引,在这种情况下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的重复记录都删除,然后再写入这条新记录,即有多条记录被删除和写入。

这里需要注意的是,如果当表中存在多个唯一索引时,使用REPLACE需要注意以下情况,假设有Students_hobby_t 表的Id、Phone都是唯一索引,如下:

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

此时,我们使用REPLACE 语句向Students_hobby_t 中写入一条记录。

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

返回结果如下:

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

此时Students_hobby_t 表数据如下:

MYSQL更新写入数据—不同于INSERT INTO 的REPLACE INTO语法介绍

我们可以看到,REPLACE将原先的2 条记录都删除了,然后将新的记录写入。


UPDATE和REPLACE的区别

  • UPDATE 中WHERE 条件没有匹配到记录时,不执行任何操作。而REPLACE在有重复记录时执行更新(先删除后写入)操作,在没有重复记录时执行写入操作。
  • UPDATE可以选择性地更新记录的部分字段,而REPLACE在发现有重复记录时就将这条记录彻底删除,再插入新的记录,即将所有的字段都更新。

最后,不建议使用REPLACE INTO更新部分字段,可能会导致其它有值字段变为NULL。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多