1、先SELECT一下,再决定INSERT还是UPDATE; 2、直接UPDATE,如果受影响行数是0,再INSERT; 3、直接INSERT,如果发生主键冲突,再UPDATE; 这几种方法都有缺陷,对MySQL来说其实最好的是直接利用INSERT...ON DUPLICATE KEY UPDATE...语句,具体到上面的test表,执行语句如下 : 1 INSERTINTOtestVALUES(1,'2016-1-1', ...
ON DUPLICATE KEY UPDATE写起来虽然方便,但是这个受影响行数是不可用于业务判断的,如批量插入判断插入行数。并且也有一定的性能影响,比单独的更新语句更耗时,建议少用。
field_1: 更新的字段 为空更新 INSERT IGNORE INTO `tableName`(`id`,`field_1`) VALUES('1','100'),('2','200') ON DUPLICATE KEY UPDATE field_1 = IF(tableName.field_1, tableName.field_1, VALUES(field_1)) 新值大于旧值更新 INSERT IGNORE INTO `tableName`(`id`,`field_1`) VALUES(...
INSERT INTO test (uid,kNum,mNum) VALUES ('2012', 0, 1) ON DUPLICATE KEY UPDATE uid=uid,kNum=VALUES(kNum)+kNum,mNum=VALUES(mNum)+mNum; 即:kNum=VALUES(kNum)+kNum
此时就要执行更新语句。 当然满足一部分唯一索引是不会触发更新操作的, 此时会执行插入操作。 而至于要更新哪些字段,要看我们自己的需求了。 先声明一点:ON DUPLICATE KEY UPDATE 这个子句是MySQL特有的,语句的作用是,当insert已经存在的记录时,就执行update。
mysql利用insert插入数据时,可能发生主键/唯一键冲突,若想在冲突时变更为update语句,可以借助于mysql的INSERT ... ON DUPLICATE KEY UPDATE语句 语法: insert into table(key...) values(val...)on duplicate key update key1=val1,key2=val2 创建表user,下面的例子都以该表为主 CREATE TABLE `user` ( `id...
ON DUPLICATE KEY UPDATE语法的目的是为了解决重复性,当数据库存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。 如何判断记录是否存在 如果插入的记录存在主键或唯一索引(例如:上例中name便是唯一索引),且表中存在该记录,那么就会认为该条记录存在,则便是更新语句。 2. ON DUPLICATE KEY UPDA...
证明这时code=3肯定是被排他锁锁住的,由于当出现唯一键冲突时,就会执行on duplicate key update,更新other字段,所以code=3一定在更新结束后处于排它锁锁定状态(补充说明:可以证明如果是共享锁的话,session2在T2时刻执行insert into test2(code, other) values (3, 33)语句的话,一定会立刻包duplicate error而不会...
同样,由于没有唯一性约束,这两条记录都会被插入,而不会有任何删除或更新操作。 如何处理无唯一性约束的情况 如果你需要在没有唯一性约束的情况下实现插入或更新操作,可以考虑使用INSERT ... ON DUPLICATE KEY UPDATE语句。即使没有唯一性约束,你也可以通过定义一个虚拟的唯一键来实现这一功能。