mysql实战之 批量update
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的更多相关文章
- mysql语句:批量更新多条记录的不同值[转]
mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...
- MyBatis魔法堂:各数据库的批量Update操作
一.前言 MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. ...
- centos mysql 实战 第一节课 安全加固 mysql安装
centos mysql 实战 第一节课 安全加固 mysql安装 percona名字的由来=consultation 顾问+performance 性能=per con a mysql ...
- mysql 如何提高批量导入的速度
mysql 如何提高批量导入的速度 最近一个项目测试,有几个mysql数据库的表数据记录达到了几十万条,在搭建测试环境 导入 测试数据时,十分慢.在网上搜索了一下,有下面一些方法可以加快mysql数据 ...
- MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别
原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...
- mybatis批量update操作的写法,及批量update报错的问题解决方法
mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...
- 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间
极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...
- MySQL实战45讲学习笔记:第十五讲
一.引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇.在这些文章中,大家在评论区留下了很多高质量的留言.现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学 ...
- MySQL实战45讲学习笔记:第三十九讲
一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...
随机推荐
- JSON语法五大要素图文介绍
原文:http://www.jb51.net/article/32398.htm JSON语法是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成,下面就进行学习研究,希望本文能教会 ...
- 在shell下,用命令将U盘挂载到ubuntu上,并将文件copy到U盘里面
首先将鼠标定位到ubuntu上,然后插上U盘,这时候先用指令: fidsk -l 查看一下U盘,(这是应该有一个盘符了) 如果没有的话,就尽享下面的步骤: 首先使用命令查看是那个分区,在U盘插入前后, ...
- 纯手写SpringMVC架构,用注解实现springmvc过程
1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping 第二步:完成对应的anno ...
- Java语言程序设计(基础篇) 第六章 方法
第六章 方法 6.2 定义方法 1.方法的定义由方法名称.参数.返回值类型以及方法体组成. 2.定义在方法头中的变量称为形式参数(formal parameter)或者简称为形参(parameter) ...
- vim 命令加解密文件
加密文件 vim file :X (大写X,是加密 ,小写x是保存) 输入密码: 确认密码: 解除密码: vim file :set key= :wq 命令模式下,输入 /word 后回车,即查找w ...
- css3几个新属性
1.text-shadow 文字阴影 p{ text-shadow:2px 2px 10px #000; } 四个参数,依次: a:水平偏移 b:垂直偏移 c:阴影程度 d:阴影颜色 2.word- ...
- Python模块和包
模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...
- SQLServer中系统存储过程sp_spaceused
sp_spaceused 执行sp_spaceused存储过程的时候可以不用带参数,直接执行,或者exec sp_spaceused都可以,返回两个结果集: 列名 数据类型 描述 database_n ...
- android五种存储方式
http://www.cnblogs.com/smalltigerlee/archive/2011/11/10/2244143.html
- python生成器实现杨辉三角
def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...