一、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 —— 替换成的字符串。
加入收藏