1.语法

(1)单表

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count] value:
{expr | DEFAULT}assignment:col_name = value assignment_list:assignment [, assignment] ...

(2)多表

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]

注意:

1)如果没有WHERE子句,则更新所有的行。

2)如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。

3)LIMIT子句用于给定一个限值,限制可以被更新的行的数目。

4)多表更新时ORDER BY和LIMIT不能被使用;

2.用法示例

mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | bbb | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | aaaa | 1 | 1 |
| 5 | ddd | 2 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> update students set sname='eee',gender='3' where sid=4;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | bbb | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | ddd | 2 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> select * from students2;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | 222 | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> update students,students2 set students.sname=students2.sname,students.gender=students2.gender where students.sid=students2.sid;
Query OK, 2 rows affected (0.04 sec)
Rows matched: 5 Changed: 2 Warnings: 0 mysql> select * from students2;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | 222 | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | 222 | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec)

1)单表修改是指修改指定单个表中的已经存在数据的一个或多个列的数值;set短语后面跟要修改的列和值;

2)where子句表示限定要修改表中的哪些数据,如果没有where子句则表示所有行都要修改;

3)order by子句表示update数据按照指定的顺序进行;

4)limit子句表示限定修改数据的行数;

5)多表修改是指修改table_references指定的多个表中满足条件的行数据,多表修改不允许使用order by和limit子句;

特别注意:where的使用

mysql> select * from students2;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | 222 | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> update students2 set sname='555';
Query OK, 5 rows affected (0.04 sec)
Rows matched: 5 Changed: 5 Warnings: 0 mysql> select * from students2;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | 555 | 1 | 2 |
| 2 | 555 | 2 | 2 |
| 3 | 555 | 3 | 2 |
| 4 | 555 | 3 | 1 |
| 5 | 555 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec)

3.属性介绍

(1)Low_priortiy

表示修改语句需要等待其他链接的读此表操作结束后再执行,只作用在MyISAM,MEMORY和MERGE存储引擎;

(2)Ignore

表示当修改语句碰到违反唯一性约束条件等情况时,语句不会报错回退而是报警告信息;

如果出现了重复关键字冲突,则这些行不会被更新。如果列被更新后,新值会导致数据转化错误,则这些行被更新为最接近的合法的值。

4.update其他用法

(1)limit和ignore

mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | aaa | 1 | 2 |
| 2 | 222 | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> update students set sname='abc' limit 2;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 1 | abc | 1 | 2 |
| 2 | abc | 2 | 2 |
| 3 | ccc | 3 | 2 |
| 4 | eee | 3 | 1 |
| 5 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.00 sec) mysql> update students set sid=1 where sid=2;
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> update ignore students set sid=1 where sid=2;
Query OK, 0 rows affected, 1 warning (0.03 sec)
Rows matched: 1 Changed: 0 Warnings: 1

(2)表达式

col1只会比原值增加1
update t1 set col1=col1+1; col2和col1的结果一样
update t1 set col1=col1+1,col2=col1

(3)order by

指定update数据的顺序,在某些情况下可以避免错误的发生;

如t表中的id字段是有唯一约束的,则以下第一个语句执行错误,第二个执行正常;

mysql> update students set sid=sid+1;
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
mysql> update students set sid=sid+1 order by sid desc;
Query OK, 5 rows affected (0.04 sec)
Rows matched: 5 Changed: 5 Warnings: 0 mysql> select * from students;
+-----+-------+--------+---------+
| sid | sname | gender | dept_id |
+-----+-------+--------+---------+
| 2 | abc | 1 | 2 |
| 3 | abc | 2 | 2 |
| 4 | ccc | 3 | 2 |
| 5 | eee | 3 | 1 |
| 6 | 111 | 1 | 1 |
+-----+-------+--------+---------+
5 rows in set (0.01 sec)

这是由于语句执行时,是从第一个开始,当1+1=2时,违反了唯一约束;

(4)多表修改

表之间通过where条件进行join操作

update items,month set items.price=month.price where items.id=month.id;

(5)UPDATE 语句使用来自另一个表的信息

修改表 titles 中的 ytd_sales 列,以反映表 sales 中的最新销售记录。

UPDATE titles
SET ytd_sales = titles.ytd_sales + sales.qty
FROM titles, sales
WHERE titles.title_id = sales.title_id
AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

(6)UPDATE 语句与 SELECT 语句中的 TOP 子句一起使用

对来自表 authors 的前十个作者的 state 列进行更新

UPDATE authors
SET state = 'ZZ'
FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1
WHERE authors.au_id = t1.au_id

MySQL-5.7 Update语句详解的更多相关文章

  1. SQL Update 语句详解

    SQL Update 语句详解   Update 语句 Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: L ...

  2. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  3. [转]MySQL-5.7 Update语句详解

    原文地址:https://www.cnblogs.com/tongxiaoda/p/7908977.html .语法 (1)单表 UPDATE [LOW_PRIORITY] [IGNORE] tabl ...

  4. MySQL 中的 SQL 语句详解

    @ 目录 总结内容 1. 基本概念 2. SQL列的常用类型 3. DDL简单操作 3.1 数据库操作 3.2 表操作 4. DML操作 4.1 修改操作(UPDATE SET) 4.2 插入操作(I ...

  5. mysql中SQL执行过程详解与用于预处理语句的SQL语法

    mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...

  6. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  7. MySQL之SELECT 语句详解

    本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的 ...

  8. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  9. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

随机推荐

  1. Linux USB 鼠标输入驱动具体解释

    平台:mini2440 内核:linux 2.6.32.2 USB设备插入时.内核会读取设备信息,接着就把id_table里的信息与读取到的信息做比較.看是否匹配,假设匹配.就调用probe函数. U ...

  2. hdu 4706:Children's Day(模拟题,模拟输出大写字母 N)

    Children's Day Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. WPF之路——用户控件对比自定义控件UserControl VS CustomControl)

    将多个现有的控件组合成一个可重用的“组”. 由一个XAML文件和一个后台代码文件. 不能使用样式和模板. 继承自UserControl类. 自定义控件(扩展) 在现有的控件上进行扩展,增加一些新的属性 ...

  4. 如何在ChemDraw 15.1 Pro中添加模板

    ChemDraw化学绘图工具为了方便用户的使用,特地开发了众多的各种类型模板.用户在绘制一些简单或复杂的化学结构式时,可以直接从ChemDraw模板库里直接调用使用,虽然ChemDraw模板非常的丰富 ...

  5. jquery取iframe中元素

    采取方法: $("#iframe_path").contents().find(".select_path_hide").val(); DOM方法:父窗口操作I ...

  6. PhoneGap 第一个程序

    首先,现在PhoneGap  ZIP包. index.html <!DOCTYPE HTML lang="zh-CN"> <html> <head&g ...

  7. python 的时间复杂度

    Python内置方法的时间复杂度 本文翻译自Python Wiki 本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了Python中若干方法的时间复杂度(或者叫“大欧”,“Big O”).该时 ...

  8. centos 6.5 安装图形界面【转】

    最近想在centos 6.5上安装图形界面,在网上找到了方法.[原文链接] CentOS6相对于CentOS5的安装有了不少的进步,有不少默认的选项可以选择,如: Desktop :基本的桌面系统,包 ...

  9. CommonJS和AMD/CMD

    JS中的模块规范(CommonJS,AMD,CMD) 一,CommonJS NodeJS是CommonJS规范的实现,webpack也是以CommonJS的形式来书写. 在浏览器环境下,没有模块也不是 ...

  10. Linux增加swap分区的方法

    在装完Linux系统之后,建立Swap分区有两种方法. 1.新建磁盘分区作为swap分区2.用文件作为swap分区 (操作更简单,我更常用) 一.新建磁盘分区作为swap分区 1. # swapoff ...