MySQL 如何实现数据更新
一般在更新时会遇到以下场景:1.所有字段全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。
一、方法分类
二、具体用法
(1)根据条件更新值
- 根据指定条件更新(多列)(全部更新)
把表中 [符合条件的行的] 列名1字段中的值全部修改为值1 [,列名2字段中的值修改为值2]。
update 表名
set 列名1 = 值1 [,列名2=值2]
[where 条件];
- 替换指定值(多列)(部分更新)
把表中 [符合条件的行的] 列名1字段中的查找内容全部修改为替换内容 [,列名2字段中的查找内容全部修改为替换内容]。
update 表名
set 列名1 = replace(列名1, '查找内容', '替换内容') [,列名2 = replace(列名2, '查找内容', '替换内容')]
[where 条件];
(2)按照不同条件(批量)更新不同值
- 使用 if
把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1,否则修改为值2 [,列名2字段中符合条件2的内容修改为值3,否则修改为值4]。
update table
set
列名1 = if(条件1,值1,值2),
列名2 = if(条件2,值3,值4)
[where 条件];
- 使用 case when
把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1 [,符合条件2的修改为值2,...] [,列名2字段中符合条件21的内容修改为值21,符合条件22的修改为值22,...] 。
update table
set 列名1 =
case
when 条件1 then 值1
when 条件2 then 值2
when 条件3 then 值3
...
end,
列名2 =
case
when 条件21 then 值21
when 条件22 then 值22
when 条件23 then 值23
...
end
[where 条件];
三、实例
students 表 (id表示主键,name是姓名,score是平均成绩)
id | name | score |
---|---|---|
1 | 李明 | 99 |
2 | 张三 | 74 |
3 | 孙华 | 59 |
(1)根据条件更新值
- 把 students 表中 name 为张三的 score 字段的值全部修改为100。
#使用where
update students
set score = 100
where name = '张三';
id | name | score |
---|---|---|
1 | 李明 | 99 |
2 | 张三 | 100 |
3 | 孙华 | 59 |
- 把 students 表中 id 大于等于2的所有行中 score 中59的部分全部修改为0,name 中三的部分全部修改为四。
#使用replace
update students
set score = replace(score,59,0),
name = replace(name,'三','四')
where id >= 2;
注意:张三替换之后是张四,并不是只有字段等于三时才能替换。
id | name | score |
---|---|---|
1 | 李明 | 99 |
2 | 张四 | 74 |
3 | 孙华 | 0 |
(2)按照不同条件更新不同值
- 请把students表中score小于60的score字段全部改为0,否则改为100,name字段中的名字改为不及格,否则改为及格。
#批量更新多值 + if
update students
set
score = if(score < 60,0,100),
name = if(score < 60,'不及格','及格');
id | name | score |
---|---|---|
1 | 及格 | 100 |
2 | 及格 | 100 |
3 | 不及格 | 0 |
注意:更新的值要满足建表时的字段类型。比如score是int类型就不能更新为char类型。
- 请把students表中score小于60的score字段全部改为0,name字段中的名字改为不及格;score大于等于90的score字段全部改为2,name字段中的名字改为优秀;score大于等于60小于90的score字段全部改为1,name字段中的名字改为良好。
#批量更新多值 + case when
update students
set
name = case
when score < 60 then '不及格'
when score >= 90 then '优秀'
else '良好'
end,
score = case
when score < 60 then 0
when score >= 90 then 2
else 1
end;
注意:更新的时候是按照代码语句的先后顺序更新的。可以尝试先更新score后更新name,结果是不一样的。
id | name | score |
---|---|---|
1 | 优秀 | 2 |
2 | 良好 | 1 |
3 | 不及格 | 0 |
MySQL 如何实现数据更新的更多相关文章
- mysql查询出数据更新到另一张表
公司今天有个需求,大体意思就是把一个表的玩家游戏场数统计出来,然后赋值到另一张表的字段上,说白了就是两张表,但是查询出来的玩家账号和次数是多条,尝试很多种写法都没用,最后用了最笨的方式解决. -- - ...
- mysql cluster 运行的必备条件
1.由于同步复制一共需要4次消息传递,故mysql cluster的数据更新速度比单机mysql要慢.所以mysql cluster要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直 ...
- 浅谈mysql集群
一.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committe ...
- 集群技术(三)MySQL集群深度解析
什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committedi ...
- MySQL Cluster --01
[MySQL Cluster] MySQL Cluster 是MySQL 官方集群部署方案, 支持自动分片.读写扩展:通过实时备份冗余数据.适合于分布式计算环境的高实用.高冗余版本,是可用性最高的方案 ...
- Mysql集群和主从
1.Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能. 需要用到mysql cluster安装包,在集群中的每一个机器上安装. 有三个关键概 ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- Redis在APP中的应用
前言 redis 是内存型数据库,读取data速度远快于mysql和sqlserver,如果将APP中列表信息或者一些常被访问的信息转存至内存上,然后APP通过redis读取内存上的数据,那么APP的 ...
- 开源数据同步神器——canal
前言 如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis.消息队列.大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据 ...
- pymysql总结
一.创建数据库 import pymysql conn = pymysql.connect(host='ip', user='root', password='密码') # 以字典的形式返回操作结果 ...
随机推荐
- android学习 基础知识
布局管理器 大小用dp; 字体用sp 线性布局 与 相对布局是可以嵌套使用的,根据实际需求,灵活使用. 1.通用属性 # 大小相关 layout_width="100dp":宽度 ...
- 统计Oracle数据库某个用户下面的对象个数
统计某个用户下面的对象个数 包括表,视图,同义词,函数,存储过程,包,触发器,索引,约束,序列. 1. sql语句 SELECT (SELECT COUNT(*) FROM USER_TABLES) ...
- 第一百零六篇:变量的不同声明(var,let和const的不同)
好家伙,JS基础接着学, 本篇内容为<JS高级程序设计>第三章学习笔记 1.变量 ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据. (确实松散,不像C或C++ ...
- Anaconda环境搭配(Ipython)-获得jupyter notebook(适用Win10)
关于如何下载anaconda并获得jupyter notebook的随笔. 首先下载anaconda,然后下载完成后,如果是win10系统,则通过下图的放大镜搜索Jupyter Notebook 会有 ...
- Day10:for循环结构的使用详解
for循环 将0~100内的奇.偶数分别求和 思路 第一步先将0~100以内的奇.偶数分成两队,第二步使奇数累加.ou'shu public class ForCirculate{ public st ...
- vscode代码部署
前言 在本地环境中开发代码时,经常需要将代码上传到服务器环境中,在环境中构建并调试程序.如果手动使用scp.ftp等文件传输程序将代码上传至环境,一次两次还好,反复多次操作则有些繁琐. 为了方便进行本 ...
- SpringCloud -Netflix 总结·
springcloud 核心组件 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.智能路由.消息 ...
- c++ trivial, standard layout和POD类型解析
目录 1. trivial类型 2. standard layout类型 3. 集大成者,POD(Plain Old Data)类型 4. 测试代码 1. trivial类型 占用一片连续的内存,编译 ...
- Spring Security(7)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 有时某些业务或者功能,需要在用户请求到来之前就进行一些判断或执行某些动作,就像在Servlet中的FilterChain过滤器所做的那样,Spr ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(35)-Fiddler如何抓取微信小程序的包-下篇
1.简介 通过前边和宏哥的学习,我们了解到Android 7.0 之后增加了对第三方证书的限制,抓包工具(charles.fiddler等)提供的证书都无法通过校验,也就无法抓取HTTPS请求了,对测 ...