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多列索引的生效規則