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,什么都不变动。。。
1
weizhen199 2021-03-04 10:27:52 +08:00 1
为啥要这么写。
....set phasea =5 where phasea is null 啊 |
2
qazwsxkevin OP @weizhen199 因为还会有其它字段的判断加入进来,在一条语句里面完成的呀,不只是这个字段的判断,我是试着写了一个测试先,反复看了几次语句的教学,也折腾不出来。。。。
|
3
eason1874 2021-03-04 10:32:20 +08:00 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; |
4
killergun 2021-03-04 10:43:13 +08:00 1
第二个进阶问题: DateTime 可以设置 ON UPDATE CURRENT_TIMESTAMP 默认值行为
|
5
qazwsxkevin OP 谢谢各位,如果是 IFNULL 或者 WHERE 判断对单个值判断,一行数据(多个值)的判断,也许就要组装 10 几条语句去完成,还是想学习一下 CASE WHEN 的方式,一行语句完成,因为组装好的语句,是通过队列去操作 MYSQL 的,所以一行语句比较符合预期。。。
|
6
smilenceX 2021-03-04 10:48:23 +08:00
第一个问题:
你可以用 case when phasea is null then 这种写法 你那个写法的值不能是 null,具体可以查 mysql 官方文档,我不能贴链接,会被 v 站要求验证手机号。 第二个问题可以考虑用 trigger 。 |