本文介绍: mysql 数据存在插入存在更新可以用 INSERT ON DUPLICATE KEY UPDATE实现。INSERT ON DUPLICATE KEY UPDATE 不可以和WHERE一起使用使用INSERT ON DUPLICATE KEY UPDATE ,需要创建唯一索引。当数据表中,不存在唯一索引字段与要插入数据相同的值时,就会插入INSERT INTO的数据,否则就…

mysql 数据存在则插入,存在则更新可以用 INSERT ON DUPLICATE KEY UPDATE实现。

INSERT ON DUPLICATE KEY UPDATE 不可以和WHERE一起使用
使用INSERT ON DUPLICATE KEY UPDATE ,需要创建唯一索引数据表中,不存在唯一索引字段与要插入数据相同的值时,就会插入INSERT INTO的数据,否则就更新 ON DUPLICATE KEY UPDATE 后面的语句

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

(1) — 创建唯一索引
格式

ALTER TABLE 表名 ADD  UNIQUE KEY `uk_唯一索引名` (`字段名`,`字段名`...);

示例

ALTER TABLE t_person ADD  UNIQUE KEY `uk_user_id_type` (`user_id`,`type`);

t_person 是表名,uk_user_id_type 是唯一索引,由user_id,type 构成。

注意,创建唯一索引时,要确保数据表中没有重复的值。比如创建唯一索引(A,B),如果数据表中存在多条相同的A和B,就需要先把重复的数据清理掉,再创建唯一索引

如果数据表里面已经有主键id了,也可以直接把这个主键id当唯一索引用表示主键id不存在就插入对应的数据,存在就更新

(2) — 不存在则插入,存在则更新

INSERT INTO t_person (name, user_id, type, auth_state, update_date) 
VALUES('lin',12345 , 123 , 1, now()) 
ON DUPLICATE KEY UPDATE auth_state = VALUES(`auth_state`)

由于 t_person 创建了唯一索引 uk_user_id_type (user_id,type),
上面这段sql表示,如果数据表中不存在数据(user_id,type)值为 (12345 , 123)时,就会插入。
如果存在,就会执行 ON DUPLICATE KEY UPDATE 后面的语句。也就是将此条数据的auth_state 更新为 auth_state=1。

批量插入/更新

INSERT ON DUPLICATE KEY UPDATE,还支持 批量插入/更新

对应mybatis代码如下

<insert id="batchInsertOnDuplicate" parameterType="com.domain.test.Person" >
    insert into t_person  (name, user_id, type, auth_state, update_date)
    values
    <foreach collection="list" separator="," item="item" &gt;
    (#{item.name,jdbcType=VARCHAR},
      #{item.userId,jdbcType=INT}, 
      #{item.type,jdbcType=INT}, 
      #{item.authState,jdbcType=INT}, 
      #{item.updateDate,jdbcType=DATE}
      )
    </foreach&gt;
    ON DUPLICATE KEY UPDATE `auth_state` = VALUES(`auth_state`)
  </insert&gt;

原文地址:https://blog.csdn.net/sinat_32502451/article/details/133026457

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25260.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注