MySQL中 ON DUPLICATE KEY UPDATE语法的使用

MySQL ON DUPLICATE KEY UPDATE 为Mysql特有语法

ON DUPLICATE KEY UPDATE 用法与说明 

Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践

INSERT ... ON DUPLICATE KEY UPDATE语句

扩展:

INSERT IF NOT EXIST

使用范例:

数据库当前存在id为20的记录,这时insert  id = 20 的记录会报错:

INSERT INTO `book`.`book_test` (`id`, `book_name`, `isbn`, `author`, `price`, `publisher`, `publish_date`, `is_sale`) VALUES ('20', '博弈论', '56', '刘一手', '52.00', '测试出版社', '2018-12-06', '1');
[SQL]INSERT INTO `book`.`book_test` (`id`, `book_name`, `isbn`, `author`, `price`, `publisher`, `publish_date`, `is_sale`) VALUES ('20', '博弈论', '56', '刘一手', '52.00', '测试出版社', '2018-12-06', '1');
[Err] 1062 - Duplicate entry '20' for key 'PRIMARY'

SQL的改进:存在则更新,不存在则插入

范例:

INSERT INTO `book`.`book_test` (
	`id`,
	`book_name`,
	`isbn`,
	`author`,
	`price`,
	`publisher`,
	`publish_date`,
	`is_sale`
)
VALUES
	(
		'20',
		'博弈论',
		'56',
		'刘一手',
		'100.00',
		'测试出版社',
		'2018-12-06',
		'1'
	) ON DUPLICATE KEY UPDATE book_name =
VALUES
	(book_name),
	isbn =
VALUES
	(isbn),
	author =
VALUES
	(author),
	price =
VALUES
	(price),
	publisher =
VALUES
	(publisher),
	publish_date =
VALUES
	(publish_date),
	is_sale =
VALUES
	(is_sale)

执行结果: 

[SQL]INSERT INTO `book`.`book_test` (
...
VALUES
	(is_sale)
受影响的行: 2
时间: 0.001s

可以看到原始数据进行了更新: 

Mybatis 中使用范例:

======>>    其中 id,system_id为联合索引

<insert id="insertOrUpdate" parameterType="com.company.xxx.model.MyTestBean">
        insert into ${tableName}
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="systemId != null">
                system_id,
            </if>
            <if test="id != null">
                id,
            </if>
            <if test="order != null">
                order,
            </if>
            <if test="desc != null">
                desc,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="systemId != null">
                #{systemId,jdbcType=INTEGER},
            </if>
            <if test="id != null">
                #{id,jdbcType=BIGINT},
            </if>
            <if test="order != null">
                #{order,jdbcType=VARCHAR},
            </if>
            <if test="desc != null">
                #{desc,jdbcType=LONGVARCHAR},
            </if>
        </trim>
        ON DUPLICATE KEY UPDATE
    <trim suffixOverrides=",">
        <if test="order != null">order=VALUES(order),</if>
        <if test="desc != null">desc=VALUES(desc),</if>
    </trim>
</insert>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值