› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
qazwsxkevin
V2EX  ›  MySQL

请教这个根据条件判断 UPDATE 的语句错在哪里?(UPDATE & WHEN),另请教一个进阶的语法。。。

  •  
  •   qazwsxkevin · Mar 4, 2021 · 2267 views
    This topic created in 2037 days ago, the information mentioned may be changed or developed.
    UPDATE `testppp`.`datatbl`` SET `phasea` = (CASE `phasea` 
    WHEN NULL THEN '5'
        END)
    WHERE (`type`='2' AND `typeid`='6627');
    

    第一个问题
    如果 phasea 字段是 Null,就把它设置为 5,WHERE 是匹配条件
    测试结果是:

    Query OK, 0 rows affected (0.01 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    

    有匹配,没发生改动,确定 phasea 是 Null 的。。。

    第二个进阶问题是:
    在此基础上,如果有发生了 SET 值这个事情,就把 UpdateTime 设置为 now()
    如果没有 UPDATE,什么都不变动。。。

    6 replies  •  2021-03-04 10:48:23 +08:00
    weizhen199
        1
    weizhen199  
       Mar 4, 2021   ❤️ 1
    为啥要这么写。

    ....set phasea =5 where phasea is null

    啊
    qazwsxkevin
        2
    qazwsxkevin  
    OP
       Mar 4, 2021
    @weizhen199 因为还会有其它字段的判断加入进来,在一条语句里面完成的呀,不只是这个字段的判断,我是试着写了一个测试先,反复看了几次语句的教学,也折腾不出来。。。。
    eason1874
        3
    eason1874  
       Mar 4, 2021   ❤️ 1
    可以用 IFNULL

    UPDATE `testppp`.`datatbl`` SET `phasea` = IFNULL(`phasea`, '5') WHERE `type`='2' AND `typeid`='6627';

    最好还是可以按条件选出来直接修改

    UPDATE `testppp`.`datatbl`` SET `phasea` = '5' WHERE `type`='2' AND `typeid`='6627' AND `phasea` IS NULL;
    killergun
        4
    killergun  
       Mar 4, 2021   ❤️ 1
    第二个进阶问题: DateTime 可以设置 ON UPDATE CURRENT_TIMESTAMP 默认值行为
    qazwsxkevin
        5
    qazwsxkevin  
    OP
       Mar 4, 2021
    谢谢各位,如果是 IFNULL 或者 WHERE 判断对单个值判断,一行数据(多个值)的判断,也许就要组装 10 几条语句去完成,还是想学习一下 CASE WHEN 的方式,一行语句完成,因为组装好的语句,是通过队列去操作 MYSQL 的,所以一行语句比较符合预期。。。
    smilenceX
        6
    smilenceX  
       Mar 4, 2021
    第一个问题:
    你可以用 case when phasea is null then 这种写法
    你那个写法的值不能是 null,具体可以查 mysql 官方文档,我不能贴链接,会被 v 站要求验证手机号。
    第二个问题可以考虑用 trigger 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   828 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:45 · PVG 06:45 · LAX 15:45 · JFK 18:45
    ♥ Do have faith in what you're doing.