mysql 中 ON DUPLICATE KEY UPDATE

由于今天要轮询同步两千多个表,当每次要记录记录,时间久了就会表就会庞大,这样也不要维护;于是就想 如果表存在那么每次更新相关字段。但由于第一次使用它我也找了很久的错误。

百度了很多,还是不如 官网来得直接

表中含有多个唯一索引或主键索引
官网是这么说:当表中含有多个唯一索引或主键索引时,使用ON DUPLICATE KEY UPDATE子句更新数据,有一下结论INSERT INTO t1 (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=c+1; 相同于UPDATE t1 SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; 即就a不满足时,在考虑有没有满足b的值,有就更新。
返回值
如果有新增就返回自增ID,并使用INSERT ... ON DUPLICATE KEY UPDATE 插入或更新数据,LAST_INSERT_ID() 会返回自增ID。
使用详情
ON DUPLICATE KEY UPDATE 子句可能包含更新多列的值,每个值通过 ,隔开。 在子句设置列值时,

  1. 可以直接设置值即INSERT INTO t1 (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c='change'.
  2. 也可以通过values(column_name)获取列值 ,既是:INSERT INTO t1 (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=values(c)column_name就是取得中 NSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) 的值

下面是我今天修改的正确的代码:

INSERT  into Temp_Pollpayment_20171201 (bank_time,order_id,order_table) values ('{$result_datum['charge_time']}','{$result_datum['charge_id']}','{$item}') ON DUPLICATE KEY UPDATE  bank_time=values(bank_time),order_id=values(order_id)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值