中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中replace?into與replace區別是什么

發布時間:2022-08-24 11:37:17 來源:億速云 閱讀:167 作者:iii 欄目:MySQL數據庫

本篇內容介紹了“MySQL中replace into與replace區別是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

MySQL中replace?into與replace區別是什么

0.故事的背景

【表格結構】

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` 這兩個是聯合唯一索引,多關注后續需要用到!!!

MySQL中replace?into與replace區別是什么

【需求:】

  • 根據表格里面, 209133002266賬戶的數據,重新插入一個用戶20220302001, 使得新生成的數據中strategy_type & status & destroy_at 字段與209133002266用戶的一致。

  • 使用update 一條一條更新也行,但是比較慢。

  • 使用replace into 效果會高很多,但是深入研究發現也有一些坑的地方

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 后面選擇的字段,如果根據查詢結果取值,則寫字段名;如果是寫死的,則直接寫具體值即可
# 可以理解為,第一部分是插入表格的結構,第二部分是你查詢的數據結果

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

step1: 第一次執行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;

MySQL中replace?into與replace區別是什么

【執行完之后,查詢結果如下:】

MySQL中replace?into與replace區別是什么

step2: 第二次執行sql情況

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

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

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

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

step3: 第三次執行sql情況

# 此時執行的是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;

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

  • 最終查看到的情況與第二次執行的sql一樣。

  • 當新數據已經存在的時候,replace into 與replace是一樣的

  • 后續刪除所有20220302001,執行1次,2次sql,發現replace into 與 replace 效果都是一樣的

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

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

我們將strategy_type & user_name 聯合唯一索引刪除,且刪除20220302001用戶所有數據。最終表格結構如下:

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函數的具體情況

step1:執行如下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;

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

step2:再次執行replace 對應sql:

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

  • 第二次執行replace 對應sql ,因為沒有唯一索引限制,結果原始數據居然沒變動。又重新生成了新的6條數據。

  • 如果后續還執行如上的sql,則數據還會繼續增加

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

執行之前,先清理數據,將所有20220302001的數據都刪除掉

step1:執行如下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;

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

step2:再次執行replace into 對應sql:

MySQL中replace?into與replace區別是什么

MySQL中replace?into與replace區別是什么

最終發現,沒有唯一索引的時候,replace into 與replace 居然一摸一樣的效果,都是繼續增加數據。

4.replace的用法

  • 單獨replace的作用是替換字段中某數值的顯示效果。可以數值中的部分替換、也可以全部替換。

  • 如下表格,將user_name的字段,20220302改為"A_20220303"顯示,并且新字段叫做new_name顯示

MySQL中replace?into與replace區別是什么

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

MySQL中replace?into與replace區別是什么

“MySQL中replace into與replace區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青铜峡市| 霍山县| 东乌珠穆沁旗| 晋州市| 山西省| 溧水县| 乌兰县| 汝阳县| 桦川县| 堆龙德庆县| 汉源县| 垦利县| 东方市| 临桂县| 隆德县| 石林| 松原市| 浮梁县| 蓬溪县| 洛隆县| 车致| 武安市| 运城市| 邢台县| 海宁市| 晋中市| 新竹县| 冕宁县| 禹州市| 句容市| 涿鹿县| 东源县| 罗源县| 海晏县| 诸城市| 寻乌县| 三穗县| 邳州市| 连平县| 武强县| 全南县|