mysql 新增或修改

一、DUPLICATE KEY UPDATE +关键字

1、准备一个表

2、给特定字段创建一个唯一索引(可以是组合索引)

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `status` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `create_date` datetime NULL DEFAULT NULL,
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `update_date` datetime NULL DEFAULT NULL,
  `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `Indexes_1`(`username`, `phone`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3、上手操作,示例SQL

insert into user(username,phone,status,create_by,create_date,update_by,update_date,remarks) 
values('test','123456789','0','system','2022-01-01','system','2022-01-01','')
ON DUPLICATE KEY UPDATE
status = values(status),
create_by = values(create_by),
create_date = values(create_date),
update_by = values(update_by),
update_date = values(update_date),
remarks = values(remarks)

可以看到已经插入一条数据了,然后我们修改一下 status = ‘1’

insert into user(username,phone,status,create_by,create_date,update_by,update_date,remarks) 
values('test','123456789','1','system','2022-01-01','system','2022-01-01','')
ON DUPLICATE KEY UPDATE
status = values(status),
create_by = values(create_by),
create_date = values(create_date),
update_by = values(update_by),
update_date = values(update_date),
remarks = values(remarks)

这个时候我们就已经达到效果了,数据库并没有新增新的数据,而是直接修改

二、MyBatis中配置

1、单条数据修改SQL配置

<insert id="" parameterType="User">
        INSERT INTO user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="username != null">username,</if>
            <if test="phone != null">phone,</if>
            <if test="status != null">status,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createDate != null">create_date,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateDate != null">update_date,</if>
            <if test="remarks != null">remarks,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="username != null">#{username},</if>
            <if test="phone != null">#{phone},</if>
            <if test="status != null">#{status},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createDate != null">#{createDate},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateDate != null">#{updateDate},</if>
            <if test="remarks != null">#{remarks},</if>
        </trim>
        <trim prefix=" ON DUPLICATE KEY UPDATE " suffixOverrides=",">
            <if test="status != null">status = values(status),</if>
            <if test="createBy != null">create_by = values(create_by),</if>
            <if test="createDate != null">create_date = values(create_date),</if>
            <if test="updateBy != null">update_by = values(update_by),</if>
            <if test="updateDate != null">update_date = values(update_date),</if>
            <if test="remarks != null">remarks = values(remarks),</if>
        </trim>
    </insert>

2、多条数据批量修改

<insert id="" parameterType="java.util.List">
        insert into user(username,phone,status,create_by,create_date,update_by,update_date,remarks)
        values
        <foreach collection="list" item="entity" separator=",">
            (
            #{entity.username},
            #{entity.phone},
            #{entity.status},
            #{entity.createBy},
            #{entity.createDate},
            #{entity.updateBy},
            #{entity.updateDate},
            #{entity.remarks}
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        status = values(status),
        create_by = values(create_by),
        create_date = values(create_date),
        update_by = values(update_by),
        update_date = values(update_date),
        remarks = values(remarks)
</insert>
/* 单条数据修改 */
public
long insertOrUpdate(User user);
/* 多数据批量修改或新增 */
public void insertOrUpdateList(List<User> list);

 

posted @ 2022-04-14 10:02  洋大大  阅读(667)  评论(0编辑  收藏  举报