mysql replace update 函数


语法 replace(object,search,replace)
语义 把object对象中出现的的search全部替换成replace
UPDATE hellotable SET  'helloCol' = replace('helloCol','from','to')

replace into函数
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);


当查出来的手机号需要隐藏中间的数字时可
SELECT REPLACE(phone, SUBSTR(phone,4,4), 'XXXX')  AS phone FROM smart_platform_db.users


Mysql 跨表更新 多表update sql语句
假定有两张表
一张表为Product表存放产品信息 有产品价格列Price
一张表是ProductPrice表
要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%

Mysql有几种手段
一种 update table1 t1, table2 ts
UPDATE product p, productPrice pp SET pp.price = pp.price * 0.8 WHERE p.productId = pp.productId  AND p.dateCreated < '2019-01-01'

另 一种方法使用inner join然后更新
UPDATE product p INNER JOIN productPrice pp ON p.productId = pp.productId SET pp.price = pp.price * 0.8  WHERE  p.dateCreated < '2019-01-01'

也可以使用 left outer join  做多表 update
如果ProductPrice表中没有产品价格记录的话 将Product表的isDeleted字段置为1
UPDATE product p LEFT JOIN productPrice pp ON p.productId = pp.productId SET p.deleted = 1 WHERE pp.productId IS null

同时更新两张表
UPDATE product p INNER JOIN productPrice pp ON p.productId = pp.productId SET pp.price = pp.price * 0.8, p.dateUpdate = CURDATE() WHERE p.dateCreated < '2019-01-01'

两张表做关联 更新了ProductPrice表的price字段和Product表字段的dateUpdate两个字段


update icms_content_article ca , icms_content_article_data cad set cad.content = replace(cad.content,'runcode.php','try.php') where ca.id=cad.aid and ca.cid = 59;

update icms_content_examplecode set content = replace(content,'x-webkit-airplay','x5-playsinline playsinline webkit-playsinline="true" x-webkit-airplay');