避免MySQL数据重复插入的方法(mysql不能重复插入)

在开发过程中,避免出现数据重复插入是一件非常重要的事情。避免重复插入,除了在应用层做判断外,我们还可以从数据库层面入手,在设计表结构时添加唯一约束、使用INSERT IGNORE、使用ON DUPLICATE KEY UPDATE等方式避免重复插入。

一、 添加唯一约束

在设计表结构时,我们可以给需要去重的字段添加唯一索引。这样在插入数据时,如果发现该字段已经存在,则会导致插入失败。例如:

CREATE TABLE user (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
eml VARCHAR(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_eml (eml)
) ENGINE=InnoDB;

此时,当我们插入一条eml重复的记录时,会直接失败,避免将重复数据插入到表中。

二、使用INSERT IGNORE

INSERT IGNORE语法表示在插入时,如果发现主键或唯一索引已经存在,则忽略该插入操作。例如:

INSERT IGNORE INTO user (name,eml) VALUES ('Tom','tom@example.com');

这里插入Tom和eml为tom@example.com的记录,如果已经存在Tom或者eml为tom@example.com的记录,则该插入操作将被忽略。

三、使用ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE语法表示在插入时,如果发现主键或唯一索引已经存在,则执行更新操作。例如:

INSERT INTO user (name,eml) VALUES ('Tom','tom@example.com')
ON DUPLICATE KEY UPDATE name = 'Tom', eml = 'tom@example.com';

这里插入Tom和eml为tom@example.com的记录,如果已经存在Tom或者eml为tom@example.com的记录,则该插入操作将执行更新操作,将该记录的name和eml更新为Tom和tom@example.com。

四、代码示例

以下是一段Java代码示例,使用JDBC连接MySQL数据库,通过添加唯一约束的方式,实现避免重复插入。当出现重复数据时,会抛出SQLIntegrityConstrntViolationException异常。

Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DriverManager.getConnection(url, username, password);
String sql = "INSERT INTO user (name,eml) VALUES (?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "Tom");
stmt.setString(2, "tom@example.com");
int affectedRows = stmt.executeUpdate();
if (affectedRows == 0) {
// 插入失败
}
} catch (SQLIntegrityConstrntViolationException e) {
// 出现重复数据,插入失败
} catch (SQLException e) {
// SQL执行失败
} finally {
try { stmt.close(); } catch (Exception e) {}
try { conn.close(); } catch (Exception e) {}
}

总结

避免MySQL数据重复插入的方法有添加唯一约束、使用INSERT IGNORE、使用ON DUPLICATE KEY UPDATE等。我们可以根据实际情况选择不同的方法,在应用层尽可能避免重复插入,保证系统的数据正确性。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《避免MySQL数据重复插入的方法(mysql不能重复插入)》
文章链接:https://zhuji.vsping.com/188950.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。