数据库

MySql 不存在则插入,存在则更新或忽略

By karp 833 Views 5 MIN READ 0 Comments

在进行数据插入操作时,我们经常遇到的需求是:如果数据不存在,则插入新数据;如果数据已存在,则更新已有数据或忽略该操作。这种情况在数据库领域非常常见。本文将介绍如何在 MySql 数据库中实现该功能。

正文

1. 不存在则插入,存在则更新

1.1 使用 ON DUPLICATE KEY UPDATE 语句

如果我们想要插入的数据会导致唯一索引或主键发生冲突,可以使用 ON DUPLICATE KEY UPDATE 语句来执行更新操作。下面是一个示例:

INSERT INTO `student` (`name`, `age`) VALUES ('Jack', 19)
  ON DUPLICATE KEY 
  UPDATE `age` = 19;

在上述示例中,如果存在 name='Jack' 的数据,则执行更新操作,将 age 更新为 19。如果不存在该条数据,则插入新数据。执行该语句后,受影响的行数为 2,因为数据库中已存在一条 name='Jack' 的数据。

1.2 使用 REPLACE INTO 语句

另一种实现方式是使用 REPLACE INTO 语句。如果我们要插入的数据会导致唯一索引或主键发生冲突,该语句会先删除旧数据,然后插入新数据。以下是示例:

REPLACE INTO `student` (`name`, `age`) VALUES ('Jack', 18);

在上述示例中,如果存在 name='Jack' 的数据,则先删除该条数据,然后插入新数据。执行该语句后,受影响的行数为 2,因为数据库中已存在一条 name='Jack' 的数据,并且插入的数据会导致自增主键 id 的值变为 2。

2. 避免重复插入

如果我们要避免重复插入数据,可以使用 INSERT IGNORE INTO 关键字。如果我们要插入的数据会导致唯一索引或主键发生冲突,该关键字会忽略该次插入操作,不会插入重复数据。以下是示例:

INSERT IGNORE INTO `student` (`name`, `age`) VALUES ('Jack', 18);

在上述示例中,如果存在 name='Jack' 的数据,则会忽略新插入的数据,受影响的行数为 0,表数据不变。

结论

本文介绍了在 MySql 数据库中实现数据不存在则插入、存在则更新或忽略的方法。通过使用 ON DUPLICATE KEY UPDATE 语句、REPLACE INTO 语句或 INSERT IGNORE INTO 关键字,我们可以根据需要灵活地处理数据插入操作。

参考文献

本文由 karp 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:https://www.ikarp.top/index.php/archives/668.html

标签: mysql

0 评论