MySQL中replace into語句的用法詳解
在向表中插入數(shù)據(jù)的時候,經(jīng)常遇到這樣的情況:
1、首先判斷數(shù)據(jù)是否存在;
2、如果不存在,則插入;
3、如果存在,則更新。
在 SQL Server 中可以這樣寫:
if not exists (select 1 from table where id = 1) insert into table(id, update_time) values(1, getdate()) else update table set update_time = getdate() where id = 1
在MySQL 中也可以先select,判斷是否存在,存在則 update 否則 insert
但在MySQL 中有更簡單的方法,使用 replace into關(guān)鍵字
或
replace into table(id, update_time) select 1, now();
replace into 跟 insert 功能類似,不同點在于:replace into 首先嘗試插入數(shù)據(jù)到表中。
1、如果發(fā)現(xiàn)表中已經(jīng)有此行數(shù)據(jù)(根據(jù)主鍵或者唯一索引判斷)則先刪除此行數(shù)據(jù),然后插入新的數(shù)據(jù)。
2、 否則,直接插入新數(shù)據(jù)。
要注意的是:插入數(shù)據(jù)的表必須有主鍵或者是唯一索引!否則的話,replace into 會直接插入數(shù)據(jù),這將導(dǎo)致表中出現(xiàn)重復(fù)的數(shù)據(jù)。
MySQL中replace into有三種寫法:
1. replace into table(col, ...) values(...)
2. replace into table(col, ...) select ...
3. replace into table set col=value, ...
前兩種形式用的多些。其中 “into” 關(guān)鍵字可以省略,不過最好加上 “into”,這樣意思更加直觀。
另外,對于那些沒有給予值的列,MySQL 將自動為這些列賦上默認值。
可惜的是replace不支持update某些特性,也就不能直接當(dāng)作update使用:
常見update寫法:update table set col=col+1 where id=1;
使用replace into不支持這樣的寫法:replace into table set col=col+1,id=1;
1、首先判斷數(shù)據(jù)是否存在;(沒問題)
2、如果不存在,則插入;(沒問題)
3、如果存在,某字段值在原來的基礎(chǔ)上加上或減去某個數(shù),如加一操作。(不支持)
相關(guān)文章
mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行的流程詳解
這篇文章主要給大家介紹了關(guān)于mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-11-11
MySQL千萬級數(shù)據(jù)從190秒優(yōu)化到1秒的全過程
優(yōu)化MySQL千萬級數(shù)據(jù)策略還是比較多的,分表分庫,創(chuàng)建中間表,匯總表以及修改為多個子查詢,這里討論的情況是在MySQL一張表的數(shù)據(jù)達到千萬級別,在這樣的情況下,開發(fā)者可以嘗試通過優(yōu)化SQL來達到查詢的目的,所以本文給大家介紹了MySQL千萬級數(shù)據(jù)從190秒優(yōu)化到1秒的全過程2024-04-04
windows7下啟動mysql服務(wù)出現(xiàn)服務(wù)名無效的原因及解決方法
這篇文章主要介紹了windows7下啟動mysql服務(wù)出現(xiàn)服務(wù)名無效的原因及解決方法,需要的朋友可以參考下2014-06-06
SQLyog連接MySQL8.0+報錯:錯誤號碼2058的解決方案
本文將總結(jié)如何解決 SQLyog 連接 MySQL8.0+ 時報錯:錯誤號碼2058,文中通過圖文結(jié)合和代碼示例給大家總結(jié)了三種解決方案,具有一定的參考價值,需要的朋友可以參考下2023-12-12
MySQL中如何進行SQL調(diào)優(yōu)舉例詳解
這篇文章主要介紹了SQL調(diào)優(yōu)的幾種方法,包括合理設(shè)計索引,避免SELECT*,避免在SQL中進行函數(shù)計算等操作,避免使用%LIKE,注意聯(lián)合索引需滿足最左匹配原則,不要對無索引字段進行排序操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01
SQL字符型字段按數(shù)字型字段排序?qū)崿F(xiàn)方法
由于是按字母順序排列,所以123排在了2的前面,顯然不符合我們的要求,那么怎樣才能按照我們預(yù)想的數(shù)字順序排序呢2013-03-03
Linux服務(wù)上MySQL啟動、重啟和關(guān)閉的操作方法
MySQL是一種廣泛使用的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常用于各種規(guī)模的應(yīng)用程序中,在Linux服務(wù)器上管理MySQL服務(wù)是一個基本的運維任務(wù),本文將詳細介紹如何在Linux系統(tǒng)上啟動、重啟和關(guān)閉MySQL服務(wù),涵蓋不同Linux發(fā)行版(如Ubuntu和CentOS)的操作方法2024-11-11

