国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

參考文章:Mysql:如果數(shù)據(jù)存在則更新,不存在則插入

場(chǎng)景

工作中有遇到需要配置一些指定的字段數(shù)據(jù),但數(shù)據(jù)量大,不清楚之前是否有配置過(guò),正確的思路應(yīng)該是如果有這條數(shù)據(jù)了,那么更新數(shù)據(jù)的值,如果沒(méi)有這條數(shù)據(jù),那么應(yīng)該插入一條數(shù)據(jù)。
比如需要根據(jù)不同國(guó)家進(jìn)行不同功能的開(kāi)啟或者關(guān)閉,表結(jié)構(gòu)如下:

CREATE TABLE `region_config_info` (
  `id` varchar(64) NOT NULL,
  `create_time` bigint(20) DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  `func_desc` varchar(128) DEFAULT NULL COMMENT '功能說(shuō)明',
  `func_enable` bit(1) DEFAULT b'0' COMMENT '0-未開(kāi)啟,1-已開(kāi)啟',
  `func_type` int(4) NOT NULL COMMENT '功能類型',
  `region_code` varchar(8) NOT NULL COMMENT '國(guó)家的alpha2碼',
  `update_time` bigint(20) DEFAULT NULL COMMENT '更新時(shí)間',
  PRIMARY KEY (`id`),
  KEY `region_config_info_region_code_IDX` (`region_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

插入三條數(shù)據(jù):

INSERT INTO region_config_info
(id, create_time, func_desc, func_enable, func_type, region_code, update_time)
VALUES(UUID(), current_timestamp(), '是否支持二維碼分享', b'0', 0, 'FR', current_timestamp());

INSERT INTO region_config_info
(id, create_time, func_desc, func_enable, func_type, region_code, update_time)
VALUES(UUID(), current_timestamp(), '免費(fèi)抽獎(jiǎng)活動(dòng)', b'0', 1, 'FR', current_timestamp());

INSERT INTO region_config_info
(id, create_time, func_desc, func_enable, func_type, region_code, update_time)
VALUES(UUID(), current_timestamp(), '打折活動(dòng)', b'1', 2, 'FR', current_timestamp());

插入后,表數(shù)據(jù)如圖所示:
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

更新/插入數(shù)據(jù)

知道唯一索引的值

mysql語(yǔ)法支持?jǐn)?shù)據(jù)存在更新,不存在插入。判斷的依據(jù)是唯一索引的字段是否存在,對(duì)于本文中的例子就是主鍵id。
如果已知主鍵id,那么可以使用DUPLICATE、REPLACE INTO方式處理數(shù)據(jù)

DUPLICATE

語(yǔ)法

INSERT INTO 表名(唯一索引列,2,3) VALUE(1,2,3) ON DUPLICATE KEY UPDATE=,=

測(cè)試的sql如下:

  • 對(duì)于aa4b49ff-661b-11ed-ae64-6c4b90aa5ada這條數(shù)據(jù),如果沒(méi)有則插入,如果有,則更新func_enable為關(guān)閉且更新update_time。
INSERT INTO region_config_info(id, create_time, func_desc, func_enable, func_type, region_code, update_time) 
VALUE("aa4b49ff-661b-11ed-ae64-6c4b90aa5ada", current_timestamp(), '打折活動(dòng)', b'0', 2, 'FR', current_timestamp()) 
ON DUPLICATE KEY UPDATE func_enable= b'0',update_time=current_timestamp()

執(zhí)行結(jié)果如下:結(jié)果為有本條數(shù)據(jù),因此更新了func_enable和update_time
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

  • 對(duì)于1這條數(shù)據(jù),如果沒(méi)有則插入,如果有,則更新
INSERT INTO region_config_info(id, create_time, func_desc, func_enable, func_type, region_code, update_time) 
VALUE("1", current_timestamp(), '打折活動(dòng)', b'1', 2, 'CN', current_timestamp()) 
ON DUPLICATE KEY UPDATE func_enable= b'1',update_time=current_timestamp()

執(zhí)行結(jié)果如下:結(jié)果為新插入一條id為1的數(shù)據(jù)
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

REPLACE INTO

語(yǔ)法

REPLACE INTO 表名稱(1,2,3) VALUES(1,2,3)

測(cè)試的sql如下:

  • 對(duì)于1這條數(shù)據(jù),如果沒(méi)有則插入,如果有,則更新。
REPLACE INTO region_config_info(id, create_time, func_desc, func_enable, func_type, region_code, update_time)  
VALUES("1", current_timestamp(), '打折活動(dòng)', b'1', 2, 'IN', current_timestamp()) 

執(zhí)行結(jié)果如下:結(jié)果為有本條數(shù)據(jù),數(shù)據(jù)都按照新的數(shù)值插入的,create_time和update_time都更新了
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

測(cè)試的sql如下:

  • 對(duì)于2這條數(shù)據(jù),如果沒(méi)有則插入,如果有,則更新。
REPLACE INTO region_config_info(id, create_time, func_desc, func_enable, func_type, region_code, update_time)  
VALUES("2", current_timestamp(), '免費(fèi)抽獎(jiǎng)活動(dòng)', b'1', 1, 'IN', current_timestamp()) 

執(zhí)行結(jié)果如下:結(jié)果為無(wú)本條數(shù)據(jù),插入一條id為2的數(shù)據(jù)
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

并不知道唯一索引的值,只想插入/更新符合某些條件的數(shù)據(jù)

如果不知道主鍵id的情況下,根據(jù)部分條件查找進(jìn)行插入或更新數(shù)據(jù),比如:配置國(guó)家IN的“是否支持二維碼分享”活動(dòng)為開(kāi)啟,但并不知道這條數(shù)據(jù)在或者不在,也不知道主鍵id的情況,該如何處理呢?

插入語(yǔ)句
INSERT INTO region_config_info(id, create_time, func_desc, func_enable, func_type, region_code, update_time)  
SELECT UUID(), current_timestamp(), '是否支持二維碼分享', b'1', 0, 'IN', current_timestamp()
from DUAL  
where not exists(select id from region_config_info where region_code = 'IN' and func_type = 0); 

執(zhí)行結(jié)果:不存在region_code為IN且func_type是0的數(shù)據(jù),因此插入了這條數(shù)據(jù)。可以多次運(yùn)行這條數(shù)據(jù),并沒(méi)有新插入數(shù)據(jù),且原來(lái)數(shù)據(jù)的create_time、update_time都沒(méi)有更新。
如圖:
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)

更新語(yǔ)句
update region_config_info c set c.func_enable = 1, c.update_time = current_timestamp()
where id in 
(select a.id from
(select * from region_config_info where func_type = 0 and region_code in ('IN','FR') and func_enable != 1) as a)

執(zhí)行結(jié)果:更新了FR國(guó)家的func_type=0的開(kāi)啟狀態(tài),IN的由于已經(jīng)是1了,所以無(wú)需更新,可以看到結(jié)果中的update_time是有改變的。此語(yǔ)句可以批量更新一些指定條件的數(shù)據(jù)。
如圖:
mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459512.html

到了這里,關(guān)于mysql“數(shù)據(jù)不存在插入,存在則更新”實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Springboot Mybatis 不存在插入數(shù)據(jù),存在則更新數(shù)據(jù)

    Springboot Mybatis 不存在插入數(shù)據(jù),存在則更新數(shù)據(jù)

    是不是經(jīng)??吹酱a, 查一下數(shù)據(jù)庫(kù),如果存在數(shù)據(jù),就做更新語(yǔ)句調(diào)用; 如果不存在,就插入。 今天該篇介紹的 是使用? ? ?INSERT INTO ? ? ? ?ON DUPLICATE KEY UPDATE ? ? ? ?來(lái)實(shí)現(xiàn)我們上述的場(chǎng)景, 不需要自己再判斷來(lái)判斷去的。 ON DUPLICATE key update 是根據(jù)主鍵索引或者唯一

    2024年02月13日
    瀏覽(24)
  • JAVA實(shí)現(xiàn)存在更新不存在插入與及多余的進(jìn)行刪除(三)

    這個(gè)版本,主要是迭代重載了下save方法,不廢話,直接上代碼: 具體實(shí)現(xiàn)類對(duì)應(yīng)的重載方法如下: 然后就是頭部加多了 implements ICudDataServiceT, ApplicationContextAware。 通過(guò)這個(gè)ApplicationContextAware獲取到所有bean服務(wù),膚淺地以實(shí)體類拼湊一下服務(wù)名,找到bean服務(wù)就作為這個(gè)調(diào)用的

    2024年02月13日
    瀏覽(48)
  • Spring Boot Elasticsearch7.6.2實(shí)現(xiàn)創(chuàng)建索引、刪除索引、判斷索引是否存在、獲取/添加/刪除/更新索引別名、單條/批量插入、單條/批量更新、刪除數(shù)據(jù)、遞歸統(tǒng)計(jì)ES聚合的數(shù)據(jù)

    注意:我的版本是elasticsearch7.6.2、spring-boot-starter-data-elasticsearch-2.5.6 引入依賴 有時(shí)候你可能需要查詢大批量的數(shù)據(jù),建議加上下面配置文件

    2024年02月13日
    瀏覽(101)
  • mysql插入數(shù)據(jù)如果存在則忽略

    經(jīng)常有一種場(chǎng)景,某類數(shù)據(jù)只能在一張表中存在一條,我們會(huì)創(chuàng)建唯一索引進(jìn)行約束,但是如果重復(fù)插入就報(bào)錯(cuò)了,所以開(kāi)發(fā)上一版都會(huì)先查一次然后再insert。 mysql有個(gè)簡(jiǎn)單的寫法,基于已經(jīng)創(chuàng)建的索引,如果存在的話,那么就忽略這條記錄的插入。 不廢話了,上代碼吧。

    2023年04月12日
    瀏覽(22)
  • 使用saveOrUpdateBatch實(shí)現(xiàn)批量插入更新數(shù)據(jù)

    saveOrUpdateBatch 是 Hibernate 中的一個(gè)方法,可以用來(lái)批量插入或更新數(shù)據(jù)。這個(gè)方法的參數(shù)是一個(gè) List,里面可以存儲(chǔ)多個(gè)實(shí)體對(duì)象。當(dāng) Hibernate 執(zhí)行這個(gè)方法時(shí),會(huì)檢查每個(gè)實(shí)體對(duì)象是否存在主鍵,如果存在主鍵就執(zhí)行 update 操作,否則執(zhí)行 insert 操作。 使用 saveOrUpdateBatch 的代

    2024年02月11日
    瀏覽(25)
  • SQL——插入已經(jīng)存在的數(shù)據(jù)

    現(xiàn)在有一套ID為9003的高難度SQL試卷,時(shí)長(zhǎng)為一個(gè)半小時(shí),請(qǐng)你將 2021-01-01 00:00:00 作為發(fā)布時(shí)間插入到試題信息表examination_info(其表結(jié)構(gòu)如下圖),不管該ID試卷是否存在,都要插入成功,請(qǐng)嘗試插入它。 Filed Type Null Key Extra Default Comment id int(11) NO PRI auto_increment (NULL) 自增ID e

    2024年02月06日
    瀏覽(18)
  • 實(shí)現(xiàn)一個(gè)MYSQL工具類,包含判斷創(chuàng)建數(shù)據(jù)表是否存在,創(chuàng)建數(shù)據(jù)表

    可以使用Python的MySQLdb模塊來(lái)實(shí)現(xiàn)一個(gè)MYSQL工具類。下面是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)示例: 使用示例: 在上面的示例中,我們首先創(chuàng)建了一個(gè)MySQLTool類,并在初始化方法中傳入了數(shù)據(jù)庫(kù)的連接信息。然后使用connect方法連接到數(shù)據(jù)庫(kù)。 table_exists方法用于判斷給定的數(shù)據(jù)表是否存在,它執(zhí)

    2024年01月15日
    瀏覽(95)
  • Java8 實(shí)現(xiàn)批量插入和更新,SpringBoot實(shí)現(xiàn)批量插入和更新,Mybatis實(shí)現(xiàn)批量插入和更新

    基于mybatis實(shí)現(xiàn)的批量插入和更新 由于直接執(zhí)行批量所有數(shù)據(jù)可能會(huì)出現(xiàn)長(zhǎng)度超出報(bào)錯(cuò)問(wèn)題,使用如下方式即可解決 原理還是分配執(zhí)行,這里的100就是設(shè)定每次執(zhí)行最大數(shù) 這里使用插入作為例子,也可以使用批量更新 更新的寫法

    2024年02月12日
    瀏覽(31)
  • .NET 數(shù)據(jù)庫(kù)大數(shù)據(jù)操作方案(插入、更新、刪除、查詢 、插入或更新)

    海量數(shù)據(jù)操作ORM性能瓶頸在實(shí)體轉(zhuǎn)換上面,并且不能使用常規(guī)的Sql去實(shí)現(xiàn) 當(dāng)列越多轉(zhuǎn)換越慢,SqlSugar將轉(zhuǎn)換性能做到極致,并且采用數(shù)據(jù)庫(kù)最佳API 操作數(shù)據(jù)庫(kù)達(dá)到極限性能,當(dāng)然你如果不用sqlsugar了解一下原理也可以使用其他ORM實(shí)現(xiàn) ? BulkCopy是一種用于高效批量插入大量數(shù)據(jù)

    2024年02月08日
    瀏覽(23)
  • 記錄線上一次mysql只能查詢,不能插入或更新的bug

    記錄線上一次mysql只能查詢,不能插入或更新的bug

    錯(cuò)誤復(fù)現(xiàn) 突然有一天產(chǎn)品通知xx服務(wù)不可用,想著最近也沒(méi)有服務(wù)更新,就先排查一下服務(wù)日志 使用postman測(cè)試的時(shí)候請(qǐng)求明顯超時(shí),查看日志顯示是一個(gè)鎖的問(wèn)題 使用工具連接到mysql,查看information_schema.INNODB_TRX,發(fā)現(xiàn)有一個(gè)事務(wù)處于Running的狀態(tài),查看id后不能刪除。 查看

    2024年02月13日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包