插入或更新一条数据
使用 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是数据库字段名。