mysql实战之批量update

现阶段我们的业务量很小,要对admin_user表中的relationship字段进行更新,指定id是409。已知409是公司内的一服务中心,需要把该服务中心放到区代下面, 区代id是3486,相关字段是paren_id(父子级别关系),需要把409已经409旗下所有商家以及客户都转移到3486下面,这个对应字段是relationship ,业务介绍完毕,下面来实战操作:

查看各个id现在的relationship情况

mysql> SELECT  relationship FROM admin_user WHERE parent_id=409;

+-------------------------+

| relationship            |

+-------------------------+

| ,1,30,304,405,409,437,  |

| ,1,30,304,405,409,450,  |

| ,1,30,304,405,409,464,  |

| ,1,30,304,405,409,465,  |

| ,1,30,304,405,409,471,  |

| ,1,30,304,405,409,505,  |

| ,1,30,304,405,409,540,  |

| ,1,30,304,405,409,793,  |

| ,1,30,304,405,409,794,  |

| ,1,30,304,405,409,1801, |

| ,1,30,304,405,409,1802, |

| ,1,30,304,405,409,1949, |

| ,1,30,304,405,409,2015, |

+-------------------------+

13 rows in set (0.02 sec)

mysql> SELECT relationship FROM admin_user WHERE parent_id=3486;

+---------------------+

| relationship        |

+---------------------+

| ,1,30,304,3486,409, |

+---------------------+

1 row in set (0.02 sec)

现在就是要把parent_id=409 的relationship中’,1,30,304,405,409,437,’所有的409换成3486,

笨方法:一条一条的update,但是业务量小,这样可以实现,假如是几万条数据的话这样操作是不可取的,还有手动更改某一个数很难保证正确性。

UPDATE admin_user SET relationship=',1,30,304,405,3486,437,' WHERE id=437;

UPDATE admin_user SET relationship=',1,30,304,405,3486,450,' WHERE id=450;

UPDATE admin_user SET relationship=',1,30,304,405,3486,464,' WHERE id=464;

。。。。。。。。。。。

其实我就是用这样的方法去更新的,后来经过领导指点采取新的方法实现一条语句更新来实现业务,

使用到的是连接函数concat,查看语法

mysql> help concat

Name: 'CONCAT'

Description:

Syntax:

CONCAT(str1,str2,...)

Returns the string that results from concatenating the arguments. May

have one or more arguments. If all arguments are nonbinary strings, the

result is a nonbinary string. If the arguments include any binary

strings, the result is a binary string. A numeric argument is converted

to its equivalent nonbinary string form.

CONCAT() returns NULL if any argument is NULL.

URL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html

Examples:

mysql> SELECT CONCAT('My', 'S', 'QL');

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

-> NULL

mysql> SELECT CONCAT(14.3);

-> '14.3'

我需要替换掉最左边之前的字符,都是固定的,先写下查询的sql语句试试,

mysql> SELECT CONCAT(',1,30,304,3486,409,',RIGHT(relationship,LENGTH(relationship)-LENGTH(',1,30,304,405,409,'))) AS r1,relationship FROM admin_user WHERE relationship LIKE ',1,30,304,405,409,%';

+--------------------------+-------------------------+

| r1                       | relationship            |

+--------------------------+-------------------------+

| ,1,30,304,3486,409,437,  | ,1,30,304,405,409,437,  |

| ,1,30,304,3486,409,450,  | ,1,30,304,405,409,450,  |

| ,1,30,304,3486,409,464,  | ,1,30,304,405,409,464,  |

| ,1,30,304,3486,409,465,  | ,1,30,304,405,409,465,  |

| ,1,30,304,3486,409,471,  | ,1,30,304,405,409,471,  |

| ,1,30,304,3486,409,505,  | ,1,30,304,405,409,505,  |

| ,1,30,304,3486,409,540,  | ,1,30,304,405,409,540,  |

| ,1,30,304,3486,409,793,  | ,1,30,304,405,409,793,  |

| ,1,30,304,3486,409,794,  | ,1,30,304,405,409,794,  |

| ,1,30,304,3486,409,1801, | ,1,30,304,405,409,1801, |

| ,1,30,304,3486,409,1802, | ,1,30,304,405,409,1802, |

| ,1,30,304,3486,409,1949, | ,1,30,304,405,409,1949, |

| ,1,30,304,3486,409,2015, | ,1,30,304,405,409,2015, |

+--------------------------+-------------------------+

13 rows in set (0.01 sec)

很显然,r1就是我想要的结果,下面可以更改成一个更新语句了,

mysql> update admin_user set relationship=concat(',1,30,304,3486,409,',RIGHT(relationship,LENGTH(relationship)-LENGTH(',1,30,304,405,409,'))) where relationship LIKE ',1,30,304,405,409,%';

Query OK, 13 rows affected (0.05 sec)

Rows matched: 13  Changed: 13  Warnings: 0

mysql> select relationship from admin_user where parent_id=409;

+--------------------------+

| relationship             |

+--------------------------+

| ,1,30,304,3486,409,437,  |

| ,1,30,304,3486,409,450,  |

| ,1,30,304,3486,409,464,  |

| ,1,30,304,3486,409,465,  |

| ,1,30,304,3486,409,471,  |

| ,1,30,304,3486,409,505,  |

| ,1,30,304,3486,409,540,  |

| ,1,30,304,3486,409,793,  |

| ,1,30,304,3486,409,794,  |

| ,1,30,304,3486,409,1801, |

| ,1,30,304,3486,409,1802, |

| ,1,30,304,3486,409,1949, |

| ,1,30,304,3486,409,2015, |

+--------------------------+

13 rows in set (0.02 sec)

搞定,期间我尝试过用when case来实现这个业务,跟单个update一样繁琐,就这13条数据也看不出来有多效率,所以还是这个拼接替换好用,菜鸟级水平奉上。

mysql实战之 批量update的更多相关文章

  1. mysql语句:批量更新多条记录的不同值[转]

    mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...

  2. MyBatis魔法堂:各数据库的批量Update操作

    一.前言   MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. ...

  3. centos mysql 实战 第一节课 安全加固 mysql安装

    centos mysql  实战  第一节课   安全加固  mysql安装 percona名字的由来=consultation 顾问+performance 性能=per  con  a mysql ...

  4. mysql 如何提高批量导入的速度

    mysql 如何提高批量导入的速度 最近一个项目测试,有几个mysql数据库的表数据记录达到了几十万条,在搭建测试环境 导入 测试数据时,十分慢.在网上搜索了一下,有下面一些方法可以加快mysql数据 ...

  5. MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别

    原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...

  6. mybatis批量update操作的写法,及批量update报错的问题解决方法

    mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...

  7. 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间

    极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...

  8. MySQL实战45讲学习笔记:第十五讲

    一.引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇.在这些文章中,大家在评论区留下了很多高质量的留言.现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学 ...

  9. MySQL实战45讲学习笔记:第三十九讲

    一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...

随机推荐

  1. JMeter学习-025-JMeter 命令行(非GUI)模式详解(三)-测试图形化 HTML 报表(dashboard)生成

    闲话少述,接 上文 继续... 6.生成测试报表 生成测试报表前,需要先生成性能测试结果 jtl 或 csv 文件,用于测试结果的生成. jmeter -n -t JMeter分布式测试示例.jmx ...

  2. 在strust2 框架下,前端APP传过来的中文数据乱码问题

    public String addMessage() throws UnsupportedEncodingException{ Patient patient=new Patient(); patie ...

  3. Hyper-V 与Broadcom网卡兼容问题

    最近在测虚拟机时,碰到一个网卡和Hyper-V不兼容问题,现在共享给大家参考,希望对大家有帮忙. 故障描述: Dell R720 Windows 2012操作系统下的Hyper-V环境后,虚拟机网络速 ...

  4. 移动应用抓包调试利器Charles

    转载:http://www.jianshu.com/p/68684780c1b0 一.Charles是什么? Charles是在 Mac或Windows下常用的http协议网络包截取工具,是一款屌的不 ...

  5. css加载优化

    <head> <script> // https://github.com/filamentgroup/loadCSS !function(e){"use stric ...

  6. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  7. js的一些实用的小技巧

    1.移动端自适应: 移动端的编写首先需要在header写入以下内容来表示页面是以不缩放的形式展示的: <meta name="viewport" content=" ...

  8. 使用IIS发布WCF服务

    上一篇是Windows服务为宿主的WCF服务,现在用IIS为宿主发布WCF服务. 第一步:肯定是新建一个WCF服务啦[是WCF服务应用程序],然后在解决方案上再次添加一个新项目[我们选择WCF服务库, ...

  9. c#字符显示转换{0:d}

    C#:String.Format数字格式化输出 : int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfads ...

  10. 清除SQL2008R2日志文件

    最近公司的SQL数据库全转移为阿里云数据库,由于自己转移的时候是执行的脚本,所以产生了很多的日志文件,都是没用的日志文件,所以自己想清除日志,自己电脑没有安装SQL2008,所以远程公司其他安装SQL ...