MySQL的replace方法
Posted 戈博小刀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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多列索引的生效规则
以上是关于MySQL的replace方法的主要内容,如果未能解决你的问题,请参考以下文章
FragmentTransaction.replace() 淡入过渡显示“幽灵”片段
片段行为:FragmentTransaction::replace() 和反向 backStack 操作
MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)