記錄工作中根據(jù)sql返回值執(zhí)行邏輯時(shí)遇到的問題。
-
update的返回值,如果update語(yǔ)句執(zhí)行成功,則 affected row是1。
hotspot_rural_mf_1> update rural_fans_0 set status=200 where rural_id=1 and uid=103
[2021-08-17 14:00:24] 1 row affected in 61 ms
-
insert...on duplicate key update的返回值則有兩種可能,如果表中沒有記錄,則會(huì)執(zhí)行insert操作,返回值為1,如果表中有記錄,則會(huì)執(zhí)行update操作,返回值為2。
/* 記錄不存在時(shí) */
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,104,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:13:55] 1 row affected in 18 ms
/* 記錄已存在時(shí) */
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,104,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:14:07] 2 rows affected in 43 ms
注意
- ==但是也有記錄存在,但在
insert...on duplicate key操作時(shí)affected row是1的情況,比如快速的連續(xù)執(zhí)行兩次或者多次==。
/* 記錄已存在,但快速連續(xù)執(zhí)行多次時(shí) */
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:18:07] 2 rows affected in 15 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:18:08] 1 row affected in 26 ms
- 解決方法:將表中時(shí)間相關(guān)得字段設(shè)置為
DATETIME(3)...CURRENT_TIMESTAMP(3)
alter table rural_fans_0 modify `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新時(shí)間'
/* 修改字段定義后重新測(cè)試 */
/* 快速連續(xù)執(zhí)行多次的返回值都是對(duì)的 */
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:12] 2 rows affected in 43 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:13] 2 rows affected in 15 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:13] 2 rows affected in 16 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:14] 2 rows affected in 12 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:14] 2 rows affected in 10 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:15] 2 rows affected in 14 ms
hotspot_rural_mf_1> insert into rural_fans_0 (`rural_id`,`uid`,`status`) values(1,103,200) on duplicate key update `status`= 200,`update_time`=now(3)
[2021-08-17 14:25:15] 2 rows affected in 11 ms