這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了MySQL中replace into與replace區別詳解,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,希望對大家有幫助。
推薦學習:mysql影片教學
本篇為拋磚引玉篇,之前沒關注過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 行
# 此时执行的是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;
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_bin1).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;step2:再次執行replace 對應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视频教程
以上是一起分析MySQL中replace into與replace差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!