亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL之存在則更新,否則就插入數(shù)據(jù)

 更新時間:2024年01月31日 16:04:03   作者:ChengQinHong  
這篇文章主要介紹了MySQL之存在則更新,否則就插入數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

用戶獲得免費電影觀看權(quán),如果同個電影獲得再次獲得觀看權(quán),則在領(lǐng)取記錄中更新獲取時間,如果首次獲取的免費電影觀看權(quán),則新增一條獲獎記錄。

思考

其實是數(shù)據(jù)庫的“存在則更新數(shù)據(jù),不存在就插入數(shù)據(jù)”問題,MySQL有相應(yīng)的語法可以解決,需要搭配索引。

數(shù)據(jù)表結(jié)構(gòu)

CREATE TABLE `prize_order` (
  `id` int NOT NULL AUTO_INCREMENT,
  `mobile` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手機號碼',
  `order_status` int DEFAULT '0' COMMENT '受理狀態(tài),1-成功,0-失敗',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `prize_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '獎品電影編號',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `index_uni` (`mobile`,`prize_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='訂單日志表';

索引

數(shù)據(jù)

第一種insert語法(推薦?。。。?/h3>

語法(此時不知道表中已有prize_id='1'的數(shù)據(jù))

insert into prize_order (mobile,create_time,prize_id) values('15122223333','2022-10-02 00:00:00','1') on DUPLICATE key update create_time =now()

不知道表中數(shù)據(jù)的情況下,已有數(shù)據(jù)會更新,mobile='15122223333' and prize_id='1'數(shù)據(jù)會修改create_time字段=now() 

執(zhí)行情況

語法(此時不知道表中無prize_id='60'的數(shù)據(jù))

insert into prize_order (mobile,create_time,prize_id) values('15122223333',now(),'60') on DUPLICATE key update create_time = now()

不知道表中數(shù)據(jù)的情況下, 當數(shù)據(jù)不存在時,則會新增一條mobile='15122223333' ,prize_id='1',create_time字段=now() 的數(shù)據(jù) 

執(zhí)行情況

第二種replace語法(個別場景下使用)

語法(此時不知道表中已有prize_id='1'的數(shù)據(jù))

replace into prize_order(mobile,order_status,create_time,prize_id)VALUES('15122223333','1',now(),'1')

執(zhí)行情況

???????

 

語法(此時不知道表中無prize_id='20'的數(shù)據(jù))

replace into prize_order(mobile,order_status,create_time,prize_id)VALUES('15122223333','1',now(),'20')

執(zhí)行結(jié)果

 缺點

相信replace語法對很多“存在則更新,否則插入數(shù)據(jù)”的需求都滿足。

我們也看到了,它會刪除原數(shù)據(jù),再進行插入數(shù)據(jù),此時你有些字段不想更新,則被它抹除了,所以,用這個語法記得把所有需要的字段都正確賦值,不然會出現(xiàn)丟失數(shù)據(jù)的后果。

總結(jié)

根據(jù)以上對比,insert語法更優(yōu),推薦使用,因為不影響原有id,也只會更新所需字段,其余不處理的字段保持原有值;而replace語法則會改變id和改變除所需字段以外的值,有丟失數(shù)據(jù)的風險,建議熟悉該語法并對應(yīng)業(yè)務(wù)場景才使用。

好了,以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論