我需要更新2个datetime列,我需要它们使用mysql 4.1.20版完全相同.我正在使用此查询:
mysql> update table set last_update=now(), last_monitor=now() where id=1;
Run Code Online (Sandbox Code Playgroud)
它是安全的,或者有可能在不同的时间更新列,因为有2个可见的调用now()?
我不认为它可以与不同的值(我认为内部MySQL调用更新now()每行或类似的东西只有一次),但我不是专家,你觉得呢?
第二个问题为什么此查询不更新列:
mysql> update table set last_update=now(), last_monitor=now() where id=1;
Run Code Online (Sandbox Code Playgroud)
Rad*_*ris 134
找到了解决方案:
mysql> UPDATE table SET last_update=now(), last_monitor=last_update WHERE id=1;
Run Code Online (Sandbox Code Playgroud)
我在MySQL Docs中找到了这个,经过一些测试后它可以工作:
以下语句将col2设置为当前(更新的)col1值,而不是原始col1值.结果是col1和col2具有相同的值.此行为与标准SQL不同.
UPDATE t1 SET col1 = col1 + 1,col2 = col1;
关于第二个问题,没有任何答案,没有找到关于这个的mysql文档.
当语句开始执行时,MySQL 对每个语句计算 now() 一次。所以每个语句有多个可见的 now() 调用是安全的。
select now(); select now(), sleep(10), now(); select now();
+---------------------+
| now() |
+---------------------+
| 2018-11-05 16:54:00 |
+---------------------+
1 row in set (0.00 sec)
+---------------------+-----------+---------------------+
| now() | sleep(10) | now() |
+---------------------+-----------+---------------------+
| 2018-11-05 16:54:00 | 0 | 2018-11-05 16:54:00 |
+---------------------+-----------+---------------------+
1 row in set (10.00 sec)
+---------------------+
| now() |
+---------------------+
| 2018-11-05 16:54:10 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212768 次 |
| 最近记录: |