iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中UPDATE的使用细节是什么
  • 870
分享到

MySQL中UPDATE的使用细节是什么

2024-04-02 19:04:59 870人浏览 泡泡鱼
摘要

本篇内容介绍了“Mysql中UPDATE的使用细节是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求

本篇内容介绍了“Mysql中UPDATE的使用细节是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

需求背景

  最近接到一个数据迁移的需求,旧系统的数据迁移到新系统;旧系统不会再新增业务数据,业务操作都在新系统上进行

  为了降低迁移的影响,数据进行分批迁移,也就是说新旧系统会并行一段时间

  数据分批不是根据 id 范围来分的,也就说每批数据的 id 都是无规律的

  另外,为了保证新旧系统数据的对应,新系统的 id 尽可能的沿用旧系统的 id

  因为表 id 在新旧系统都是自增的,所以迁移的时候,旧系统的 id 可能在新系统已经被占用了,类似如下

MySQL中UPDATE的使用细节是什么

需求描述

  数据迁移的时候,尽可能沿用旧系统的 id,而冲突的 id 需要进行批量调整

  如何调整这批冲突的 id,正是我当下要实现的需求

  我的实现是根据业务数据的增长情况,结合目前新系统的最大 id 来预设一个起始的 id

  MySQL中UPDATE的使用细节是什么

  这个 sql 该如何写?

需求实现

  有小伙伴可能觉得,这还不简单?

  不就 5 条数据嘛,这么写不就搞定了

MySQL中UPDATE的使用细节是什么

  多简单的事,还铺垫那么多,楼主你到底会不会?

  楼主此刻幡然醒悟:小伙伴,你好厉害哇哦

  但是如果冲突的数据很多了(几百上千),你也这样一条一条改?

  如果你真这样做,我是真心佩服你

  很显然,理智的小伙伴更多

  那该如何实现了?

  楼主就不卖关子了,可以用局部变量 +  UPDATE 来实现,直接上 SQL

MySQL中UPDATE的使用细节是什么

  我们来看实际案例

  表 tbl_batch_update

MySQL中UPDATE的使用细节是什么

  数据如下

MySQL中UPDATE的使用细节是什么

  执行效果如下

MySQL中UPDATE的使用细节是什么

  更新之后

MySQL中UPDATE的使用细节是什么

  更严谨点

MySQL中UPDATE的使用细节是什么

  该如何实现?  UPDATE 是不是也支持 ORDER BY ?

  还真支持,如下所示

MySQL中UPDATE的使用细节是什么

  楼主平时使用 UPDATE 的时候,基本没结合 ORDER BY ,也没尝试过结合 LIMIT

  这次尝试让楼主对 UPDATE 产生了陌生的感觉,它的完整语法应该是怎样的?我们慢慢往下看

UPDATE

  下文都是基于 mysql 8.0 的官方文档 UPDATE Statement 整理而来,推荐大家直接去看官方文档

  单表语法

MySQL中UPDATE的使用细节是什么

  是不是有很多疑问:

MySQL中UPDATE的使用细节是什么

  多表语法

MySQL中UPDATE的使用细节是什么

  相比于单表,貌似更简单一些,不支持 ORDER BY 和  LIMIT

  LOW_PRIORITY

   UPDATE 的修饰符之一,用来降低 SQL 的优先级

  当使用 LOW_PRioRITY 之后, UPDATE 的执行将会被延迟,直到没有其他客户端从表中读取数据为止

  但是,只有表级的存储引擎才支持 LOW_PRIORITY ,表级锁的存储引擎包括: MyISAM 、 MEMORY 和 MERGE ,所以最常用的 InnoDB 是不支持的

  使用场景很少,混个眼熟就好

  IGNORE

   UPDATE 的修饰符之一,用来声明 SQL 执行时发生错误的处理方式

  如果没有使用 IGNORE , UPDATE 执行时如果发生错误会中止,如下所示

MySQL中UPDATE的使用细节是什么

   9002 更新成 9003 的时候,主键冲突,整个 UPDATE 中止, 9000 更新成的 9001 会回滚, 9003 ~ 9005 还未执行更新

  如果使用 IGNORE ,会是什么情况了?

MySQL中UPDATE的使用细节是什么

   UPDATE 执行期间即使发生错误了,也会执行完成,最终返回受影响的行数

  上述返回受影响的行是 2 ,你们说说是哪两行修改了?

  更多关于 IGNORE 的信息,请查看:The Effect of IGNORE on Statement Execution

  关于使用场景,在新旧系统并行,做数据迁移的时候可能会用到,主键或者唯一键冲突的时候直接忽略

  ORDER BY

  如果大家对 UDPATE 的执行流程了解的话,那就更好理解了

   UPDATE 其实有两个阶段: 查阶段 、 更新阶段

  一行一行的处理,查到一行满足 WHERE 子句,就更新一行

  所以,这里的 ORDER BY 就和 SELECT 中的 ORDER BY 是一样的效果

  关于使用场景,大家可以回过头去看看前面讲到的的需求背景,

  IGNORE 的案例 1 中的报错,其实也可以用 ORDER BY

MySQL中UPDATE的使用细节是什么

  LIMIT

   LIMIT row_count 子句是行匹配限制。一旦找到满足 WHERE 子句的 row_count 行,无论这些行是否实际更改,该语句都会立即停止

  也是就说 LIMIT 限制的是 查阶段 ,与 更新阶段 没有关系

MySQL中UPDATE的使用细节是什么

  注意:与 SELECT 语法中的 LIMIT

MySQL中UPDATE的使用细节是什么

  还是有区别的

  value DEFAULT

MySQL中UPDATE的使用细节是什么

   UPDATE 中 SET 子句的 value 是表达式,我们可以理解,这个 DEFAULT 是什么意思?

  我们先来看这么一个问题,假设某列被声明了 NOT NULL ,然而我们更新这列成 NULL

MySQL中UPDATE的使用细节是什么

  会发生什么

MySQL中UPDATE的使用细节是什么

  我们看下 SQL_MODE ,执行 SELECT @@sql_mode; 得到结果

MySQL中UPDATE的使用细节是什么

   STRICT_TRANS_TABLES 表明启动了严格模式,对 INSERT 和 UPDATE 语句的 value 管控会更严格

  如果我们关闭严格模式,再看看执行结果

MySQL中UPDATE的使用细节是什么

   name 字段声明成了 NOT NULL ,非严格 SQL 模式下,将 name 设置成 NULL 是成功的,但更改的值并非 NULL ,而是 VARCHAR 类型的默认值: 空字符串('')

小结下

    1、严格 SQL 模式下,对 NOT NULL 的字段设置 NULL ,会直接报错,更新失败

    2、非严格 SQL 模式下,对 NOT NULL 的字段设置 NULL ,会将字段值设置字段类型对应的默认值

  关于字段类型的默认值,可查看:Data Type Default Values

  关于 sql_mode ,可查看:Server SQL Modes

  通常情况下,生成环境的 MySQL 一般都是严格模式,所以大家知道有 value DEFAULT 这回事就够了

  SET 字段顺序

  针对如下 SQL

MySQL中UPDATE的使用细节是什么

  想必大家都很清楚

  然而,以下 SQL 中的 name 列的值会是多少

MySQL中UPDATE的使用细节是什么

  我们来看下结果

MySQL中UPDATE的使用细节是什么

   name 的值是不是和预想的有点不一样?

  单表 UPDATE 的 SET 是从左往右进行的,然而多表 UPDATE 却不是,多表 UPDATE 不能保证按任何特定顺序进行

“MySQL中UPDATE的使用细节是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中UPDATE的使用细节是什么

本文链接: https://www.lsjlt.com/news/74322.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中UPDATE的使用细节是什么
    本篇内容介绍了“MySQL中UPDATE的使用细节是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求...
    99+
    2024-04-02
  • mysql中select update的用法是什么
    在MySQL中,SELECT UPDATE语句用于同时查询和更新数据表中的记录。该语句结合了SELECT和UPDATE两个操...
    99+
    2024-04-09
    mysql
  • mysql中update replace的用法是什么
    在MySQL中,UPDATE语句用于更新表中的数据,而REPLACE语句用于替换表中的数据。 UPDATE语句的语法如下: UPDA...
    99+
    2024-03-08
    mysql
  • mysql中update子查询的使用方法是什么
    在 MySQL 中,可以使用 UPDATE 子查询来更新一个表中的数据,方法如下: UPDATE table1 SET co...
    99+
    2024-04-09
    mysql
  • oracle中update的使用方法是什么
    在Oracle中,可以使用UPDATE语句来更新表中的数据。UPDATE语句的基本语法如下: UPDATE table_name S...
    99+
    2024-04-09
    oracle
  • MySQL update语句的用法是什么
    MySQL的UPDATE语句用于修改表中现有记录的值,可以根据指定的条件更新指定的列。 UPDATE语句的基本语法如下: UPDAT...
    99+
    2024-02-29
    MySQL
  • oracle中update select的作用是什么
    在Oracle中,UPDATE SELECT语句用于更新表中的数据,可以根据SELECT语句的结果集来更新数据。这种语法允许...
    99+
    2024-04-09
    oracle
  • sql中update select的用法是什么
    在SQL中,UPDATE SELECT语句用于更新表中的数据,同时使用SELECT语句来指定要更新的行。 基本语法如下: UPDAT...
    99+
    2024-04-09
    sql
  • MySQL中insert和update怎么使用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • 关于 MySQL 中 Update 使用
    一、关于 MySQL 中 Update 使用 1.1 Update 简介 Update 是 SQL 中用于更新表格中已有记录的命令。通过使用 Update 命令,您可以更新表格中的一行或多行记录,并根据需要更改它们的值。在执行 U...
    99+
    2023-09-02
    数据库 mysql sql
  • mysql中update语句返回的结果是什么
    本篇内容主要讲解“mysql中update语句返回的结果是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中update语句返回的结果是什么”吧! ...
    99+
    2024-04-02
  • MySQL中ON DUPLICATE key update的使用
    目录一、主键索引、唯一索引和普通索引的关系二、实战操作1.ON DUPLICATE key update使用介绍:2.ON DUPLICATE key update测试样例:三、总结一、主键索引、唯一索引和普通索引的关系...
    99+
    2023-05-25
    MySQL ON DUPLICATE key update
  • Java中super关键字的用法和细节是什么
    这篇文章将为大家详细讲解有关Java中super关键字的用法和细节是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种...
    99+
    2023-06-26
  • SQL语句Count的细节是什么
    本篇文章为大家展示了SQL语句Count的细节是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。count语句支持*、列名、常量、变量,并且可以用distinct...
    99+
    2024-04-02
  • java update的用法是什么
    Java Update 是一个用于更新 Java Runtime Environment (JRE) 的工具。它可用于下载和安装最新...
    99+
    2023-09-13
    java
  • mysql中的for update怎么用
    这篇文章主要介绍“mysql中的for update怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql中的for update怎么用”文章能帮...
    99+
    2024-04-02
  • update语法是什么及怎么使用
    UPDATE语法用于修改表中的数据。它的基本语法如下:```UPDATE table_nameSET column1 = value...
    99+
    2023-06-13
    update语法
  • mysql中update的用法
    mysql中update的用法:使用语法“update 表名称 set 列名称=新值 where 更新条件;”,update语句主要是用来修改表中的数据,从而更新表中已存在的数据记录。在表 students 中的实例:将 id 为...
    99+
    2024-04-02
  • mysql中update和select怎么结合使用
    在MySQL中,可以使用SELECT语句来检索要更新的数据,然后将结果用于UPDATE语句中更新表中的记录。 例如,假设我们...
    99+
    2024-04-09
    mysql
  • 详解lodash中的cloneDeep使用细节
    目录正文支持的数据类型cloneDeepWith拷贝算法介绍structuredClone VS cloneDeep循环引用处理方法总结正文 lodash中的cloneDeep是一个...
    99+
    2023-01-28
    lodash cloneDeep使用 lodash cloneDeep
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作