create table tbl(id1 int, id2 int, count int) primary key(id1, id2);
表tbl中不存在某条记录时,其功能就如 insert into tbl(id1, id2, count) values(5, 3, 0);
存在时,则如 update tbl set count = count + 1 where id1 = 5 and id2 = 3;否则的话,我还得先判断表中是否存在记录,然后再判断选择那种语句!
表tbl中不存在某条记录时,其功能就如 insert into tbl(id1, id2, count) values(5, 3, 0);
存在时,则如 update tbl set count = count + 1 where id1 = 5 and id2 = 3;否则的话,我还得先判断表中是否存在记录,然后再判断选择那种语句!
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]这种形式,在ID1、ID2建立复合索引
on duplicate key update count = count + 1;
insert into tbl values (5,3,0) on duplicate key update count = count + 1;
如果不存在记录则是 1 rows affected
如果存在的话,则变为 2 rows affected这是不是意味着该语句在后一种情况下被分解成了两条语句呢? 哪两条呢?
INSERT 这句成功了1条
UPDATE这句也成功了1条。