MySQL的replace方法


 

mysql中replace函數直接替換mysql數據庫中某字段中的特定字符串,不再需要自己寫函數去替換,用起來非常的方便,mysql 替換函數replace()
Update `table_name` SET `field_name` = replace (`field_name`,’from_str’,'to_str’) Where `field_name` LIKE ‘%from_str%’

實例:把'病假' 替換為 '--':UPDATE users SET username=REPLACE(username,'病假','--')  WHERE username LIKE '%病假%';
說明:
table_name —— 表的名字
field_name —— 字段名
from_str —— 需要替換的字符串
to_str —— 替換成的字符串

---------------------------------

mysql 里面可以用uuid()語句來生成一個UUID:

select uuid();
或 select replace(uuid(), '-', '');

直接在insert語句中插入UUID作主鍵的用法(簡便):

insert into Price( Name, UUID, Price, BID) values('FEIFEI_TEST', uuid(), 32, 3);

------------------------------

在mysql中,可以使用uuid 來生成主鍵,但是用mysql的uuid()函數 ,生成的uuid是36位的,其中包含32個字符以及4個分隔符(-),往往這個分隔符對我們來說是沒有用的,可以使用mysql自帶的replace函數去掉分隔符

replace(uuid(),'-','')   ---->將uuid()中的‘-’,去掉,即替換成空串;

此外

upper(replace(uuid(),'-',''))用於將字符轉換為大寫

--------------------------------

轉:

MySQL的replace方法

一、replace函數

語法:replace(object,search,replace)
語義:把object對象中出現的的search全部替換成replace。
實例:

update hellotable set 'helloCol' = replace('helloCol','helloSearch','helloReplace')
  • 1

二、replace into函數

為什么會接觸到replace into函數,是因為業務需要向數據庫中插入數據,前提是重復的不能再次插入。以前用where解決的,今天才知道還有一個更簡潔的方法replace。
replace具備替換擁有唯一索引或者主鍵索引重復數據的能力,也就是如果使用replace into插入的數據的唯一索引或者主鍵索引與之前的數據有重復的情況,將會刪除原先的數據,然后再進行添加。
語法:replace into table( col1, col2, col3 ) values ( val1, val2, val3 )
語義:向table表中col1, col2, col3列replace數據val1,val2,val3

實例:

REPLACE INTO users (id,name,age) VALUES(123, ‘chao’, 50);
  • 1

三、唯一的組合索引

因為在創建索引的時候發現很多問題,放在這兒做一下記錄。

首先我們使用replace的原因就是因為它有“防重”的作用,但是它的“防重”作用僅僅是局限在唯一索引上或者主鍵索引上。所以我們使用replace時必須要有一個唯一索引。

而業務的邏輯需要四個字段唯一確定一條記錄,也就是說我要建立一個組合索引也即多列索引。

最終確定需求就是我要create出一個unique的組合索引,很簡單是不是,后面講坑。。。

先講講組合(多列)索引是什么鬼?!
組合索引的生效原則是 從前向后依次生效,如果中間某個索引沒有使用, 那么斷點前面的索引部分起作用,斷點后面的索引沒有起作用,即最左優先原則

例如創建多列索引(a,b,c)

where a=3 and b=45 and c=5... 這種三個索引順序使用中間沒有斷點,全部發揮作用; where a=3 and c=5... 這種情況下b就是斷點,a發揮了效果,c沒有效果; where b=3 and c=4... 這種情況下a就是斷點,在a后面的索引都沒有發揮作用,這種寫法聯合索引沒有發揮任何效果; where b=45 and a=3 and c=5... 這個跟第一個一樣,全部發揮作用,abc只要用上了就行,跟寫的順序無關;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如何創建組合索引
語法:CREATE UNIQUE INDEX index ON table( col1, col2, col3 )
實例:CREATE UNIQUE INDEX index_unique ON app(pkgName,version,device,osver)

很簡單是不是,但是我還是遇到了兩個坑,浪費了我一下午,第一個坑就是創建的索引長度是有限制的,不能超過767,發現字段的長度也用不了varchar(256)於是改成了varchar(100)。
你以為這樣就OK了,NAIVE!第二個坑,“error: Duplicate etry ~”,英文不好真的很費勁,我翻譯出來“重復實例”,卻還是沒能理解是什么意思,還一味的排除sql語句的錯誤。。。直到逛了外網論壇才發現是表的問題,因為在創建這個唯一索引的時候表中已經有很多重復數據了,所以很肯定創建不成功!
清空表數據,完美。。。

參考博客:
mysql多列索引的生效規則


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM