一、replace函數
語法:replace(object,search,replace)。
語義:把object對象中出現的的search全部替換成replace
實例:
update hellotable set 'hellocol'= replace('hellocol','hellosearch','helloreplace')。
二、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);
三、唯一的組合索引
因為在創建索引的時候發現很多問題,放在這兒做一下記錄。
首先我們使用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只要用上了就行,跟寫的順序無關;
如何創建組合索引
語法: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的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 —— 替換成的字符串。
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 —— 替換成的字符串。
加入收藏