由于今天要轮询同步两千多个表,当每次要记录记录,时间久了就会表就会庞大,这样也不要维护;于是就想 如果表存在那么每次更新相关字段。但由于第一次使用它我也找了很久的错误。
百度了很多,还是不如 官网来得直接
表中含有多个唯一索引或主键索引
官网是这么说:当表中含有多个唯一索引或主键索引时,使用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 子句可能包含更新多列的值,每个值通过,
隔开。 在子句设置列值时,
- 可以直接设置值即
INSERT INTO t1 (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c='change'
. - 也可以通过
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)