成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL中replace?into與replace區(qū)別是什么

本篇內(nèi)容介紹了“MySQL中replace into與replace區(qū)別是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、任縣ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的任縣網(wǎng)站制作公司

MySQL中replace?into與replace區(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` 這兩個(gè)是聯(lián)合唯一索引,多關(guān)注后續(xù)需要用到?。。?/pre>

MySQL中replace?into與replace區(qū)別是什么

【需求:】

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

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

  • 使用replace into 效果會(huì)高很多,但是深入研究發(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 后面跟表格+需要插入的所有字段名(自動(dòng)遞增字段不用寫)
# select 后面選擇的字段,如果根據(jù)查詢結(jié)果取值,則寫字段名;如果是寫死的,則直接寫具體值即可
# 可以理解為,第一部分是插入表格的結(jié)構(gòu),第二部分是你查詢的數(shù)據(jù)結(jié)果

2.有唯一索引時(shí)—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;

MySQL中replace?into與replace區(qū)別是什么

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

MySQL中replace?into與replace區(qū)別是什么

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

MySQL中replace?into與replace區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

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

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

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

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

# 此時(shí)執(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;

MySQL中replace?into與replace區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

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

  • 當(dāng)新數(shù)據(jù)已經(jīng)存在的時(shí)候,replace into 與replace是一樣的

  • 后續(xù)刪除所有20220302001,執(zhí)行1次,2次sql,發(fā)現(xiàn)replace into 與 replace 效果都是一樣的

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

3.沒(méi)有唯一索引時(shí)—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 對(duì)應(yīng)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區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

step2:再次執(zhí)行replace 對(duì)應(yīng)sql:

MySQL中replace?into與replace區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

  • 第二次執(zhí)行replace 對(duì)應(yīng)sql ,因?yàn)闆](méi)有唯一索引限制,結(jié)果原始數(shù)據(jù)居然沒(méi)變動(dòng)。又重新生成了新的6條數(shù)據(jù)。

  • 如果后續(xù)還執(zhí)行如上的sql,則數(shù)據(jù)還會(huì)繼續(xù)增加

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

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

step1:執(zhí)行如下replace into 對(duì)應(yīng)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區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

step2:再次執(zhí)行replace into 對(duì)應(yīng)sql:

MySQL中replace?into與replace區(qū)別是什么

MySQL中replace?into與replace區(qū)別是什么

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

4.replace的用法

  • 單獨(dú)replace的作用是替換字段中某數(shù)值的顯示效果??梢詳?shù)值中的部分替換、也可以全部替換。

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

MySQL中replace?into與replace區(qū)別是什么

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

MySQL中replace?into與replace區(qū)別是什么

“MySQL中replace into與replace區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)頁(yè)名稱:MySQL中replace?into與replace區(qū)別是什么
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article34/pgsspe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、微信公眾號(hào)虛擬主機(jī)、微信小程序商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
高邑县| 财经| 芦山县| 蓬安县| 正镶白旗| 壤塘县| 社会| 西盟| 柞水县| 长武县| 壤塘县| 广丰县| 栾城县| 达日县| 丹东市| 尼玛县| 古田县| 金昌市| 扎鲁特旗| 海晏县| 南平市| 墨脱县| 莆田市| 德昌县| 宜兰市| 阿尔山市| 类乌齐县| 繁昌县| 桐柏县| 乳山市| 岑溪市| 永仁县| 博湖县| 镇雄县| 察雅县| 常德市| 汝阳县| 建德市| 永济市| 蓝田县| 东乡县|