欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中Replace語(yǔ)句用法實(shí)例詳解

 更新時(shí)間:2022年08月08日 09:01:22   作者:ixxqq  
mysql的replace函數(shù)是一個(gè)非常方便的替換函數(shù),下面這篇文章主要給大家給大家介紹了關(guān)于MySQL中Replace語(yǔ)句用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

replace into平時(shí)在開(kāi)發(fā)中很少用到,這次是因?yàn)樵谧鲆粋€(gè)生成分布式ID的開(kāi)源項(xiàng)目,調(diào)研雅虎推出的一個(gè)基于數(shù)據(jù)庫(kù)生成唯一id生成方案:flickr 碰到的一個(gè)知識(shí)盲點(diǎn),僅以此篇記錄一下。

一、replace into函數(shù)

表結(jié)構(gòu)

CREATE TABLE `id_generator` (  
`id` bigint(20) unsigned NOT NULL auto_increment,  
`stub` char(1) NOT NULL default '',  
  PRIMARY KEY  (`id`),  
UNIQUE KEY `stub` (`stub`)  
) ENGINE=MyISAM;

id列是主鍵索引,stub 列是唯一索引 。

replace into向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)時(shí),如果數(shù)據(jù)重復(fù),則刪除重復(fù)的那行數(shù)據(jù),然后在插入一行。

replace具備替換擁有唯一索引或者主鍵索引重復(fù)數(shù)據(jù)的能力,也就是如果使用replace into插入的數(shù)據(jù)的唯一索引或者主鍵索引與之前的數(shù)據(jù)有重復(fù)的情況,將會(huì)刪除原先的數(shù)據(jù),然后再進(jìn)行添加。

那怎么判斷是否重復(fù)的標(biāo)準(zhǔn)就是:唯一索引或者主鍵索引是否一致。語(yǔ)法:replace into table( col1, col2, col3 ) values ( val1, val2, val3 )
語(yǔ)義:向table表中col1, col2, col3列replace數(shù)據(jù)val1,val2,val3

以id_generator表為例:

REPLACE INTO id_generator(stub) VALUES ('trade')
 
 
執(zhí)行信息如下:
No errors; 1 rows affected, taking 20ms

表示只添加了一行。

執(zhí)行結(jié)果:

+----+--------------+
| id | stub         |
+----+--------------+
| 1  | trade        |
+----+--------------+

接續(xù)執(zhí)行如下語(yǔ)句:

REPLACE INTO id_generator(stub) VALUES ('trade')
 
 
執(zhí)行信息如下:
No errors; 2 rows affected, taking 23ms

因?yàn)閯h除了一行,添加了一行。

執(zhí)行結(jié)果:

+----+--------------+
| id | stub         |
+----+--------------+
| 3  | trade        |
+----+--------------+

因?yàn)閟tub列創(chuàng)建列唯一索引,所以replace into當(dāng)stub有重復(fù)的數(shù)據(jù)行時(shí),會(huì)刪除這行數(shù)據(jù)重新添加,導(dǎo)致id發(fā)生變化。

如果replace into唯一索引 id 重復(fù)的話,會(huì)怎么樣呢?

REPLACE INTO id_generator(id) VALUES (3)
 
 
執(zhí)行信息如下:
No errors; 2 rows affected, taking 28ms

因?yàn)閯h除了一行,添加了一行。

執(zhí)行結(jié)果:

+----+--------------+
| id | stub         |
+----+--------------+
| 3  |              |
+----+--------------+

這時(shí)我們看到stub列的值為空字符串,因?yàn)閕d是唯一索引,id=3的記錄已經(jīng)存在,所以replace into會(huì)刪除id=3的記錄,重新添加,導(dǎo)致stub為空。

二、replace into 、insert ignore 和 insert into的區(qū)別

replace into 跟 insert into 功能類似。

不同點(diǎn)在于:

insert into 最普遍的插入,如果表中存在主鍵相同的數(shù)據(jù),執(zhí)行會(huì)報(bào)錯(cuò)。

insert ignore 如果表中存在主鍵相同的數(shù)據(jù)不在插入該條數(shù)據(jù),反之則插入(存在則忽略,反之插入)。

replace into 首先嘗試插入數(shù)據(jù)到表中。

  1. 如果發(fā)現(xiàn)表中已經(jīng)有此行數(shù)據(jù)(根據(jù)主鍵或者唯一索引判斷)則先刪除此行數(shù)據(jù),然后插入新的數(shù)據(jù)。
  2. 否則,直接插入新數(shù)據(jù)。

注意:**插入數(shù)據(jù)的表必須有主鍵或者是唯一索引!**否則的話,replace into 會(huì)直接插入數(shù)據(jù),這將導(dǎo)致表中出現(xiàn)重復(fù)的數(shù)據(jù)

三、replace函數(shù)

語(yǔ)法:replace(field,search,replace)

說(shuō)明:field - 數(shù)據(jù)庫(kù)表的列名

search - 需要替換的字符串

replace - 替換成的字符串

語(yǔ)義:將列名:field 中出現(xiàn)的search字符串,全部替換成replace字符串。

實(shí)例:

update id_generator set stub = replace(stub,'trade','user')
 
select replace(uuid(), '-', '');

附:Mysql中的replace into跟insert into用法類似

  • INSERT :會(huì)每次插入一條新的數(shù)據(jù)。
  • REPLACE:先看表中是否存在此條數(shù)據(jù),如果存在,先刪除該條數(shù)據(jù),再插入一條新的數(shù)據(jù);如果不存在,則直接插入一條新的數(shù)據(jù)

重點(diǎn):

  • 根據(jù)表中的主鍵或唯一索引來(lái)判斷,如果表中沒(méi)有主鍵或唯一索引,那么REPLACE INTO 就相當(dāng)于 INSERT

INTO,會(huì)直接插入一條數(shù)據(jù)。

總結(jié)

到此這篇關(guān)于MySQL中Replace語(yǔ)句用法詳解的文章就介紹到這了,更多相關(guān)MySQL Replace用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL8.0.23版本的root密碼重置最優(yōu)解法

    MySQL8.0.23版本的root密碼重置最優(yōu)解法

    這篇文章主要介紹了MySQL8.0.23版本的root密碼重置最優(yōu)解法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MySQL表數(shù)據(jù)文件損壞導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的原因與解決方案

    MySQL表數(shù)據(jù)文件損壞導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的原因與解決方案

    在日常的數(shù)據(jù)庫(kù)管理中,遇到MySQL表數(shù)據(jù)文件損壞的情況并不罕見(jiàn),這種情況下,MySQL數(shù)據(jù)庫(kù)可能會(huì)無(wú)法正常啟動(dòng),給業(yè)務(wù)運(yùn)行帶來(lái)嚴(yán)重影響,本文將探討如何診斷和解決MySQL表數(shù)據(jù)文件損壞導(dǎo)致的數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)問(wèn)題,需要的朋友可以參考下
    2025-03-03
  • 連接mysql報(bào)錯(cuò)——沒(méi)有設(shè)置“usessl=false”的問(wèn)題

    連接mysql報(bào)錯(cuò)——沒(méi)有設(shè)置“usessl=false”的問(wèn)題

    這篇文章主要介紹了連接mysql報(bào)錯(cuò)——沒(méi)有設(shè)置“usessl=false”的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Sysbench多線程性能測(cè)試工具

    Sysbench多線程性能測(cè)試工具

    sysbench是一個(gè)多線程性能測(cè)試工具,可以進(jìn)行CPU/內(nèi)存/IO/數(shù)據(jù)庫(kù)等性能測(cè)試,不過(guò)我絕大多數(shù)的時(shí)候都是用它來(lái)對(duì)數(shù)據(jù)庫(kù)(MySQL)進(jìn)行oltp測(cè)試
    2012-11-11
  • 淺談MySQL next-key lock 加鎖范圍

    淺談MySQL next-key lock 加鎖范圍

    我們知道MYSQL NEXT-KEY LOCK是用來(lái)防止幻讀,那么MySQL next-key lock 加鎖范圍是多少,很多人都不知道,本文就來(lái)詳細(xì)的介紹一下
    2021-06-06
  • 利用MySQL統(tǒng)計(jì)一列中不同值的數(shù)量方法示例

    利用MySQL統(tǒng)計(jì)一列中不同值的數(shù)量方法示例

    這篇文章主要給大家介紹了利用MySQL統(tǒng)計(jì)一列中不同值的數(shù)量的幾種解決方法,每種方法都給了詳細(xì)的示例代碼供大家參考學(xué)習(xí),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面跟隨小編一起來(lái)看看吧。
    2017-04-04
  • MySql的存儲(chǔ)過(guò)程學(xué)習(xí)小結(jié) 附pdf文檔下載

    MySql的存儲(chǔ)過(guò)程學(xué)習(xí)小結(jié) 附pdf文檔下載

    這篇文章主要是介紹mysql存儲(chǔ)過(guò)程的創(chuàng)建,刪除,調(diào)用及其他常用命令
    2012-03-03
  • 不卸載原有mysql直接安裝mysql8.0

    不卸載原有mysql直接安裝mysql8.0

    本文主要介紹了不卸載原有mysql直接安裝mysql8.0,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Mysql如何獲取json字符串/數(shù)組的值

    Mysql如何獲取json字符串/數(shù)組的值

    這篇文章主要介紹了Mysql如何獲取json字符串/數(shù)組的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • MySQL之InnoDB存儲(chǔ)引擎中的索引用法及說(shuō)明

    MySQL之InnoDB存儲(chǔ)引擎中的索引用法及說(shuō)明

    這篇文章主要介紹了MySQL之InnoDB存儲(chǔ)引擎中的索引用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06

最新評(píng)論