Karp 的技术博客

在进行数据插入操作时,我们经常遇到的需求是:如果数据不存在,则插入新数据;如果数据已存在,则更新已有数据或忽略该操作。这种情况在数据库领域非常常见。本文将介绍如何在 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 关键字,我们可以根据需要灵活地处理数据插入操作。

参考文献

mysql

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年04月02日 06:27
7

目录

来自 《MySql 不存在则插入,存在则更新或忽略》