最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中replace into與replace區(qū)別詳解

 更新時間:2022年08月19日 10:11:20   作者:hello-alien  
本文主要介紹了MySQL中replace into與replace區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本篇為拋磚引玉篇,之前沒關(guān)注過replace into 與replace 的區(qū)別。經(jīng)過多個場景測試,居然沒找到在插入數(shù)據(jù)的時候兩者有什么本質(zhì)的區(qū)別?如果了解詳情的伙伴們,請告知留言告知一二,不勝感激?。?!

0.故事的背景

【表格結(jié)構(gòu)】

CREATE TABLE `xtp_algo_white_list` (
  `strategy_type` int DEFAULT NULL,
  `user_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
  `status` int DEFAULT NULL,
  `destroy_at` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `xtp_algo_white_list_UN` (`strategy_type`,`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin


# `strategy_type`,`user_name` 這兩個是聯(lián)合唯一索引,多關(guān)注后續(xù)需要用到?。。?/pre>

【需求:】

  • 根據(jù)表格里面, 209133002266賬戶的數(shù)據(jù),重新插入一個用戶20220302001, 使得新生成的數(shù)據(jù)中strategy_type & status & destroy_at 字段與209133002266用戶的一致。
  • 使用update 一條一條更新也行,但是比較慢。
  • 使用replace into 效果會高很多,但是深入研究發(fā)現(xiàn)也有一些坑的地方

1.replace into 的使用方法

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

# replace into 后面跟表格+需要插入的所有字段名(自動遞增字段不用寫)
# select 后面選擇的字段,如果根據(jù)查詢結(jié)果取值,則寫字段名;如果是寫死的,則直接寫具體值即可
# 可以理解為,第一部分是插入表格的結(jié)構(gòu),第二部分是你查詢的數(shù)據(jù)結(jié)果

2.有唯一索引時—replace into & 與replace 效果

step1: 第一次執(zhí)行sql情況

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

【執(zhí)行完之后,查詢結(jié)果如下:】

step2: 第二次執(zhí)行sql情況

為什么第二次執(zhí)行的時候,顯示update 12行的數(shù)據(jù)且created at 數(shù)據(jù)更新了,而第一次會顯示update 6行???

1.因為在執(zhí)行sql的時候,replace into 其實分了兩個步驟執(zhí)行。第一步是將查詢到數(shù)據(jù)轉(zhuǎn)化為新的數(shù)據(jù)。第二步, 新的數(shù)據(jù)如果表中已經(jīng)有相同的內(nèi)容,則刪除掉。如果沒有相同的內(nèi)容,則直接插入新的數(shù)據(jù)。

2.因如上第一次執(zhí)行的時候,已經(jīng)生成一次新數(shù)據(jù)了,第二次會先刪除,再把最新的數(shù)據(jù)插入進去,最終才顯示update 12 行

step3: 第三次執(zhí)行sql情況

# 此時執(zhí)行的是replace 

replace xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

  • 最終查看到的情況與第二次執(zhí)行的sql一樣。
  • 當新數(shù)據(jù)已經(jīng)存在的時候,replace into 與replace是一樣的
  • 后續(xù)刪除所有20220302001,執(zhí)行1次,2次sql,發(fā)現(xiàn)replace into 與 replace 效果都是一樣的

【總結(jié):】當有唯一索引限制的時候,如果新增的數(shù)據(jù)會受限于唯一索引,則數(shù)據(jù)只會插入一次,如果已經(jīng)存在則會先刪除再插入。此時replace into 與replace 效果一樣。

3.沒有唯一索引時—replace into 與 replace

我們將strategy_type & user_name 聯(lián)合唯一索引刪除,且刪除20220302001用戶所有數(shù)據(jù)。最終表格結(jié)構(gòu)如下:

CREATE TABLE `xtp_algo_white_list` (
  `strategy_type` int DEFAULT NULL,
  `user_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
  `status` int DEFAULT NULL,
  `destroy_at` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

1).replace函數(shù)的具體情況

step1:執(zhí)行如下replace 對應sql:

replace xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

step2:再次執(zhí)行replace 對應sql:

  • 第二次執(zhí)行replace 對應sql ,因為沒有唯一索引限制,結(jié)果原始數(shù)據(jù)居然沒變動。又重新生成了新的6條數(shù)據(jù)。
  • 如果后續(xù)還執(zhí)行如上的sql,則數(shù)據(jù)還會繼續(xù)增加

2).replace into 函數(shù)的具體情況

執(zhí)行之前,先清理數(shù)據(jù),將所有20220302001的數(shù)據(jù)都刪除掉

step1:執(zhí)行如下replace into 對應sql:

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

step2:再次執(zhí)行replace into 對應sql:

最終發(fā)現(xiàn),沒有唯一索引的時候,replace into 與replace 居然一摸一樣的效果,都是繼續(xù)增加數(shù)據(jù)。

通過以上分析,沒看出replace into 與replace 具體有啥區(qū)別????有誰知道呢?

4.replace的用法

  • 單獨replace的作用是替換字段中某數(shù)值的顯示效果??梢詳?shù)值中的部分替換、也可以全部替換。
  • 如下表格,將user_name的字段,20220302改為"A_20220303"顯示,并且新字段叫做new_name顯示

select *, replace(user_name,20220302,'A_20220303') as "new_name" from xtp_algo_white_list where user_name = 20220302001;

到此這篇關(guān)于MySQL中replace into與replace區(qū)別詳解的文章就介紹到這了,更多相關(guān)MySQL replace into與replace內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗

    MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗

    數(shù)據(jù)庫的操作越來越成為整個應用的性能瓶頸了,這點對于Web應用尤其明顯。這篇文章主要介紹了MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MySQL 5.7解壓版安裝、卸載及亂碼問題的圖文解決方法

    MySQL 5.7解壓版安裝、卸載及亂碼問題的圖文解決方法

    這篇文章主要介紹了MySQL 5.7解壓版安裝、卸載及亂碼問題的圖文解決方法,本文分步驟給大家介紹的非常詳細,需要的朋友可以參考下
    2017-07-07
  • MySQL中字段類型char、varchar和text的區(qū)別

    MySQL中字段類型char、varchar和text的區(qū)別

    今天小編就為大家分享一篇關(guān)于MySQL中字段類型char、varchar和text的區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL的MVCC是否解決幻讀(最新推薦)

    MySQL的MVCC是否解決幻讀(最新推薦)

    這篇文章主要介紹了MySQL的MVCC是否解決幻讀,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 簡單了解添加mysql索引的3條原則

    簡單了解添加mysql索引的3條原則

    這篇文章主要介紹了簡單了解添加mysql索引的3條原則,如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數(shù)據(jù)文件的中間,沒有必要看所有數(shù)據(jù),需要的朋友可以參考下
    2019-06-06
  • mysql 5.7以上版本下載及安裝圖文教程

    mysql 5.7以上版本下載及安裝圖文教程

    這篇文章主要介紹了mysql 5.7以上版本下載及安裝圖文教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 解決seata不能使用mysql8版本的問題方法

    解決seata不能使用mysql8版本的問題方法

    這篇文章主要介紹了解決seata不能使用mysql8版本的問題方法,文中通過示例和圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • SQL?INSERT及批量的幾種方式總結(jié)

    SQL?INSERT及批量的幾種方式總結(jié)

    SQL提供了INSERT語句,用于將一行或多行插入表中,下面這篇文章主要給大家介紹了關(guān)于SQL?INSERT及批量的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 淺析MySQL的lru鏈表

    淺析MySQL的lru鏈表

    這篇文章主要介紹了MySQL lru鏈表的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • MySQL 5.6 如何更改安全的處理密碼探討

    MySQL 5.6 如何更改安全的處理密碼探討

    MySQL 5.6將會自動的在日志中隱藏密碼信息,接下來為你詳細介紹下MySQL 5.6 如何更安全的處理密碼,感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03

最新評論

会泽县| 宁城县| 北安市| 乾安县| 宾阳县| 杂多县| 丹凤县| 泽州县| 育儿| 建德市| 宣汉县| 五指山市| 南宫市| 鸡东县| 社旗县| 内乡县| 梨树县| 清水河县| 德清县| 彰武县| 竹山县| 义马市| 阿城市| 鱼台县| 京山县| 翁源县| 仁化县| 积石山| 邵阳县| 稷山县| 色达县| 二连浩特市| 安仁县| 定襄县| 新宁县| 曲靖市| 航空| 翁源县| 孟连| 五河县| 旌德县|