欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

背景

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

思考

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

數(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 '手機(jī)號(hào)碼',
  `order_status` int DEFAULT '0' COMMENT '受理狀態(tài),1-成功,0-失敗',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
  `prize_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '獎(jiǎng)品電影編號(hào)',
  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語(yǔ)法(推薦?。。。?/h3>

語(yǔ)法(此時(shí)不知道表中已有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ù)會(huì)更新,mobile='15122223333' and prize_id='1'數(shù)據(jù)會(huì)修改create_time字段=now() 

執(zhí)行情況

語(yǔ)法(此時(shí)不知道表中無(wú)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ù)的情況下, 當(dāng)數(shù)據(jù)不存在時(shí),則會(huì)新增一條mobile='15122223333' ,prize_id='1',create_time字段=now() 的數(shù)據(jù) 

執(zhí)行情況

第二種replace語(yǔ)法(個(gè)別場(chǎng)景下使用)

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

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

執(zhí)行情況

???????

 

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

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

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

 缺點(diǎn)

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

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

總結(jié)

根據(jù)以上對(duì)比,insert語(yǔ)法更優(yōu),推薦使用,因?yàn)椴挥绊懺衖d,也只會(huì)更新所需字段,其余不處理的字段保持原有值;而replace語(yǔ)法則會(huì)改變id和改變除所需字段以外的值,有丟失數(shù)據(jù)的風(fēng)險(xiǎn),建議熟悉該語(yǔ)法并對(duì)應(yīng)業(yè)務(wù)場(chǎng)景才使用。

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

相關(guān)文章

最新評(píng)論