mysql 数据不存在则插入,存在则更新,可以用 INSERT ON DUPLICATE KEY UPDATE实现。
INSERT ON DUPLICATE KEY UPDATE 不可以和WHERE一起使用,
使用INSERT ON DUPLICATE KEY UPDATE ,需要先创建唯一索引。当数据表中,不存在唯一索引的字段与要插入数据相同的值时,就会插入INSERT INTO的数据,否则就更新 ON DUPLICATE KEY UPDATE 后面的语句。
不存在则插入,存在则更新
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,还支持 批量插入/更新。
<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" >
(#{item.name,jdbcType=VARCHAR},
#{item.userId,jdbcType=INT},
#{item.type,jdbcType=INT},
#{item.authState,jdbcType=INT},
#{item.updateDate,jdbcType=DATE}
)
</foreach>
ON DUPLICATE KEY UPDATE `auth_state` = VALUES(`auth_state`)
</insert>
原文地址:https://blog.csdn.net/sinat_32502451/article/details/133026457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_25260.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!