MySQL UPDATE 查询不更新所有列?

标签 mysql sql sql-update

update short_url 
  set redirected="2018-08-10 15:07:44", 
  count=count+1 
  where long_val="EF7219D6-606D-409B-BEF1-00FFF9FF713C";

+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| short_val  | varchar(8)  | NO   | PRI | NULL    |       |
| long_val   | varchar(36) | NO   | PRI | NULL    |       |
| created    | datetime    | YES  |     | NULL    |       |
| redirected | datetime    | YES  |     | NULL    |       |
| count      | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

重定向的日期随着这次更新而更新,但是计数没有增加 ?

最佳答案

我们可以测试 NULL 值,并将 NULL 替换为非空值,例如 ...

UPDATE short_url t 
   SET t.redirected = '2018-08-10 15:07:44'
     , t.count = IFNULL( t.count ,0) + 1
--               ^^^^^^^         ^^^
 WHERE t.long_val = '...'  

如果count的当前值为NULL,那么我们将为其赋值1


请注意,大多数包含 NULL 值的表达式的计算结果都会为 NULL。我们可以使用 IS NULL 条件测试、IFNULL() 函数、符合 ANSI 标准的 COALESCE 函数等来处理 NULL 值。

关于MySQL UPDATE 查询不更新所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787429/

相关文章:

mysql - 更新表中计数>1 的记录

mysql - 如何通过mysql中带有某些前缀的行的自动增量值来更新行的特定字段(列)?

mysql - 使用 Count 生成另一个字段

java - 无限循环数据库检查

SQL Server 查询超时取决于 Where 子句

sql - 使用SQL获取字符串中分隔符之间的值

javascript - SQLITE3 更新案例 Node.js

php - MySql COUNT() 作为字段只返回一个条目

php - 创建 php 数据库并显示其内容

c# - 处理数千个 UDP 数据包并使用 Threads 将它们保存在远程数据库中的最佳方法是什么?