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方法

2017年08月25日 18:34:23 MrsSun1122 阅读数:39485
 

一、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多列索引的生效规则

最新文章

  1. iOS证书失效
  2. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup
  3. linq的创建 和 数据的增删改查
  4. memcach 安装
  5. Swifter初体验;按照惯例,来一个Swift版本的:iOS图片验证码?
  6. 多路复用I/O poll()
  7. 桦仔 笔记7-徐 SQLSERVER日志记录机制
  8. 不是技术牛人,如何拿到国内IT巨头的Offer(转)
  9. csrf学习笔记
  10. angular2 学习笔记 ( app initialize 初始化 )
  11. Postman----模拟服务器返回数据
  12. Ajax的post表单,不在url后接一大串参数键值对的方法
  13. SAP传输请求自动发布
  14. Spring框架学习07——基于传统代理类的AOP实现
  15. 雷林鹏分享:XML 相关技术
  16. 1. Java 基 础 部 分
  17. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item
  18. Django 使用getattr() 方法获取配置文件的变量值
  19. oracle sql生成日历表
  20. Window 查看端口进程使用

热门文章

  1. sql——sql中的各种连接
  2. 本地navicat远程连接到云服务器数据库
  3. 显示 隐藏DIV的技巧
  4. CommandoVM-虚拟机映像文件 | VM打开直接用
  5. Git版本库的创建(Ubuntu)
  6. docker教程——docker镜像打包上传
  7. 【助教】浅析log4j的使用
  8. ElasticSearch 2 (12) - Shard数调优(ElasticSearch性能)
  9. 蜗牛慢慢爬 LeetCode 23. Merge k Sorted Lists [Difficulty: Hard]
  10. 组件 -- Button