Mysql:ON DUPLICATE KEY UPDATE的用法

插入或更新一条数据

使用 INSERT 语句尝试插入一个已经存在的唯一键或主键时,MySQL 会抛出一个错误。但如果你使用了 ON DUPLICATE KEY UPDATE,MySQL 就会执行更新操作,而不是插入新的记录。
这种语法只在存在重复的唯一键或主键时触发更新操作。如果没有发现重复,那么就会像正常的 INSERT 语句那样插入新的记录。

INSERT INTO TABLE_NAME (id, name, age) 
VALUES (1, 'name', 22) 
ON DUPLICATE KEY UPDATE name='name', age=22

Mybatis示例

<insert id="save" parameterType="com.test.domin.Device">    
  INSERT INTO devices (device_id, device_name, status)    
  VALUES (#{deviceId}, #{deviceName}, #{status})    
  ON DUPLICATE KEY UPDATE    
  `device_name` = VALUES(device_name),    
  `status` = VALUES(status)    
</insert>

批量插入或更新

Mybatis示例

Product.java
public class Product {
    private Integer productId;
    private String productName;
    private Integer quantity;
    // getters and setters ...
}
ProductMapper.xml
<mapper namespace="com.example.mapper.ProductMapper">
    <!-- 其他的SQL映射和操作 ... -->
    <!-- 批量插入或更新的操作 -->
    <insert id="insertOrUpdateProducts" parameterType="list">
        INSERT INTO products (product_id, product_name, quantity)
        VALUES 
        <foreach collection="list" item="product" separator="," >
            (#{product.productId}, #{product.productName}, #{product.quantity})
        </foreach>
        ON DUPLICATE KEY UPDATE
            product_name = VALUES(product_name),
            quantity = VALUES(quantity);
    </insert>
</mapper>

注意:
1.VALUES(product_name)中的product_name是数据库字段名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值