• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    记一次MySQL更新语句update的踩坑

    背景

    最近在一次线上作业过程中执行了一句DML语句,本以为万无一失,结果应用反馈说没有更新,数据还是没有变,最后经过排查才发现是我语句写错了,导致update语句执行的结果与预期不符。

    情景再现

    为了方便演示,建立一张用户表,同时插入五条数据。

    create table user(
    id int(12) comment '用户主键id',
    name varchar(36) comment '用户名',
    age int(12) comment '年龄');
    
    insert into user values (1,'one',11),(2,'two',12),(3,'three',13),(4,'four',15),(5,'five',15);

    执行完成后,现在user表中的数据如下:

    +------+-------+------+
    | id  | name | age |
    +------+-------+------+
    |  1 | one  |  11 |
    |  2 | two  |  12 |
    |  3 | three |  13 |
    |  4 | four |  15 |
    |  5 | five |  15 |
    +------+-------+------+

    现在需要把所有的年龄改成 10、用户名改成user——假设此操作有意义——我提交到运维的 DML 语句如下:

    update user set age=10 and name='user';

    当我刷新用户表,看到执行update语句后的表全部数据如下:

    +------+-------+------+
    | id  | name | age |
    +------+-------+------+
    |  1 | one  |  0 |
    |  2 | two  |  0 |
    |  3 | three |  0 |
    |  4 | four |  0 |
    |  5 | five |  0 |
    +------+-------+------+

    神奇的事情发生了,age字段全部被更新成0,而name字段竟然没有任何修改!

    错误原因及修正

    错误原因其实很简单,update语句写错了。MySQL中update语句的语法是

    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value;
    ```sql
    
    如果更新多个字段,相邻字段间应该以逗号分隔而不是`and`。如果 update 语句使用 and 作为多个字段之间的分隔符,就像最开始我提交给运维的那样,这个更新语句最终将会变成
    
    ```sql
    update user set age=(10 and name='user');

    而(10 and name='user')作为一个返回值为 boolean 类型的判断语句,返回会被映射成 1 或 0,有 99.999% 的可能会让第一个更新变量更新为错误的数据。

    正确的更新语句应该是

    update user set age=10, name='user';

    教训

    在提交DML语句前先在测试环境试一下
    基础的SQL语法不要记错

    小结

    MySQL中update语句的语法是

    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value;

    以上就是记一次MySQL更新语句update的踩坑的详细内容,更多关于MySQL更新语句update的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • MySQL UPDATE 语句的非标准实现代码
    • mysql update case 更新字段值不固定的操作
    • mysql修改记录时update操作 字段=字段+字符串
    • MySQL将select结果执行update的实例教程
    • Mysql事务中Update是否会锁表?
    • 关于Mysql update修改多个字段and的语法问题详析
    • Mysql联表update数据的示例详解
    • mysql update语句的执行过程详解
    • Mysql update多表联合更新的方法小结
    • MySQL update set 和 and的区别
    上一篇:MySQL的Flush-List和脏页的落盘机制
    下一篇:MySql主从复制实现原理及配置
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    记一次MySQL更新语句update的踩坑 记,一次,MySQL,更新,语句,