<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本篇為拋磚引玉篇,之前沒關注過replace into 與replace 的區別。經過多個場景測試,居然沒找到在插入資料的時候兩者有什麼本質的區別?如果瞭解詳情的夥伴們,請告知留言告知一二,不勝感激!!!
【表格結構】
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` 這兩個是聯合唯一索引,多關注後續需要用到!!!
【需求:】
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 後面選擇的欄位,如果根據查詢結果取值,則寫欄位名;如果是寫死的,則直接寫具體值即可 # 可以理解為,第一部分是插入表格的結構,第二部分是你查詢的資料結果
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;
【執行完之後,查詢結果如下:】
step2: 第二次執行sql情況
為什麼第二次執行的時候,顯示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;
【總結:】當有唯一索引限制的時候,如果新增的資料會受限於唯一索引,則資料只會插入一次,如果已經存在則會先刪除再插入。此時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
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;
step2:再次執行replace 對應sql:
執行之前,先清理資料,將所有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;
step2:再次執行replace into 對應sql:
最終發現,沒有唯一索引的時候,replace into 與replace 居然一摸一樣的效果,都是繼續增加資料。
通過以上分析,沒看出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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45