MySQL增删改查之改_update

UPDATE语句  

  进行数据记录的更新。

1、更新单个表中的值

语法:

UPDATE   [IGNORE]  table_reference
  SET col_name1=expr1 [, col_name2=expr2,],...
  [WHERE where_condition]
  [ORDER BY ...]
  [LIMIT row_count]

①有where子句的,将满足WHERE条件的所有行的一个或多个列值改为新的值;

②没有WHERE子句,则会对该表中所有的记录的指定的列的所有行,进行修改更新操作。

基本格式:

  update <表名> set <列名>=<值或值的表达式>  where <条件表达式>;

例1:把95号球员的联盟会员号码改为2000(值)

UPDATE  players

  SET  leagueno = 2000

  WHERE playerno = 95;

例2: 把所有的罚款增加5%(值的表达式)

UPDATE penalties

  SET amount = amount*1.05;

例3: 把住在Stratford的球员的获胜局数设为0(指定列所有行)

UPDATE matches

  SET won = 0

  WHERE playerno IN

  (SELECT playerno FROM players WHERE town='Stratford');

注意:在SET子句的子查询中,不允许访问要更新的表。

UPDATE <表1>

  SET amount = amount-(SELECT avg(amount) FROM 表1);

!!上述写法不允许

解决(分两步):

mysql> SET @avg_amount = (SELECT avg(amount) FROM <表1>);

mysql> UPDATE <表1>

SET amount = amount - @avg_amount;


UPDATE语句中的ORDER BY子句

  UPDATE语句中可以使用ORDER BY子句,要求以排序的顺序来依次更新行。

在某些场景可能有用,例如:想要把所有罚款的罚款编号都加1

  ①如果从罚款编号为1的行开始更新,要么就会发生主键值重复异常;

  ②如果从罚款编号最大的行开始更新,就没有问题。

示例:把所有罚款的编号增加1

UPDATE  penalties

  SET  paymentno = paymentno + 1

  ORDER BY  paymentno DESC;


UPDATE语句中的LIMIT子句

  UPDATE语句中可以使用LIMIT子句,指定一次更新的行数

示例:把4个最高的罚款额增加5%(罚款额相同则更新编号小的球员)

UPDATE  penalties

  SET  amount= amount *1.05

  ORDER BY  amount DESC, playerno ASC

  LIMIT 4;

2、更新多个表中的值

优点:要么两个表都更新,要么两个表都不更新

语法:

UPDATE   [IGNORE]  table_references
SET col_name1=expr1 [, col_name2=expr2,],...
[WHERE where_condition]

基本格式:

  update <表名> set <列名1>=<值或值的表达式>, <列名2>=<值或值的表达式> ... where <条件表达式> ;

注意:

  ①table_references可以使用任何合法的连接语法

  ②不能使用ORDER BY和LIMIT子句

示例:把一个first分级球队的所有比赛的获胜局数设为0,并把first分级球队的队长编号改为112

UPDATE matches m,teams t

  SET m.won = 0,t.playerno = 112

WHERE t.teamno = m.teamno

AND t.division = 'first';

解析:首先执行一个二表连接查询,从两个表中找到满足连接条件 t.teamno = m.teamno 的所有行,然后对这些行分别进行更新。

MySQL之改_update的更多相关文章

  1. MySQL数据库改名字

    在这里首先感谢那个网上已经给出了解决办法的同志 有很多MySQL数据库的初学者可能都会遇到一个关于改名字的问题,可能大家第一时间就会想到去网上搜搜,其实我跟大家的心理是一样的(呵呵). 据我所知,My ...

  2. python mysql增加改查

    #python mysql增加改查,方便日后copy/paste .......... 1 #encoding: UTF-8 2 import pymysql 3 # # 打开数据库连接 4 db = ...

  3. 将现有MySQL数据库改为大小写不敏感

    用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...

  4. mysql utf8改utf8mb4

    由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4 查看当前环境 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' ...

  5. MySQL更新命令_UPDATE

    创建测试表 mysql> CREATE TABLE `product` ( -> `proID` ) NOT NULL AUTO_INCREMENT COMMENT '商品表主键', -& ...

  6. MySQL Replication--修改主键为NULL导致的异常

    测试环境:MySQL 5.5.14/MySQL 5.6.36 测试脚本: create table tb001(id int primary key,c1 int); alter table tb00 ...

  7. 【备份】使用mysqldump 实现rename database name(mysql数据库改名称)

    需求:将jxl_credit改名为jxl_test;输入:jxl_credit输出: jxl_test; 实现方式:1).新建jxl_test,2).备份jxl_credit到本地,3).然后将备份数 ...

  8. mysql查改

    1 MySQL UNION 操作符语法格式: SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditio ...

  9. mysql在线改表结构 pt-online-schema-change

    https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html 不锁表更改数据库表结构 pt-online-s ...

随机推荐

  1. 有关rip路由协议相关知识以及实例配置【第1部分】

    有关rip路由协议相关知识以及实例配置[第一部分] RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛:但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维):也希望能够从 ...

  2. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  3. cheatsheet——mac 上的一款可以显示软件所有快捷键的小工具

    https://www.mediaatelier.com/CheatSheet/ 发现一款可以显示 mac 上各种软件所有快捷键的小工具:cheatsheet,只要长按 command 键就可以了~ ...

  4. eclipse中代码格式化组合键失效了

    因为最近在整理java笔记,发现代码格式化的组合键失效了,但其他的组合键是好着的,设置里面找了也是对着的. 最后是在输入法的设置里面发现了它,原来是快捷键冲突了.取消输入法里面 的快捷键就好了,或者改 ...

  5. node.js报错throw err; // Rethrow non-MySQL errors e:\serverTest\node_modules\mysql\lib\protocol\Parser.js:79 解决方法

    今天在用node+angular做后台时,需要使用session保存登陆状态的时候,遇到了此问题,问题直译为非mysql问题,我也在后台取到的登陆用户名和密码,确实不是数据库问题.最后发现在使用ses ...

  6. memcached参数解释及常用命令

    一.执行 memcached -h 会显示所有的参数项,对应的中文解释如下: -p <num>      监听的TCP端口(默认: 11211) -U <num>      监 ...

  7. 解决VIM编辑器中文乱码

    追加如下内容到/etc/vimr (或者不同的用户家目录下的.vimrc文件中) set encoding=utf8filetype plugin indent onsyntax on" s ...

  8. java封装的方法

    java封装是由Java是面向对象程序设计语言的性质决定的,面向对象程序设计语言的三大特性之一就是封装.封装其实就是包装的意思,从专业的角度来看,就是把对象的所有组成部分组合在一起,保护私有属性. 如 ...

  9. Unity3d在Window上使用SAPI进行语音识别

    前言 在之前<Unity利用Sapi进行windows语音开发>中,本计划不准备继续做语音识别.因为在unity3d中已经提供了语音识别的相关方法,详见unity3d的官方文档:https ...

  10. 老李分享:持续集成学好jenkins之Git和Maven配置 1

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...