mysql更新多列

我需要更新2date时间列,我需要他们是完全相同的,使用MySQL版本4.1.20。 我正在使用这个查询:

mysql> update table set last_update=now(), last_monitor=now() where id=1; 

这是安全的或有可能是不同的时间更新列,因为现在()的两个可见的电话?
我不认为它可以用不同的值更新(我认为内部mysql调用now()每行只有一次或类似的东西),但我不是专家,你怎么看?

第二个问题为什么这个查询不更新列:

 mysql> update table set last_update=last_monitor=now() where id=1; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 

谢谢。

find了解决办法:

 mysql> UPDATE table SET last_update=now(), last_monitor=last_update WHERE id=1; 

我在MySQL文档中发现了这一点 ,并经过一些testing,它的工作原理:

以下语句将col2设置为当前(更新的)col1值,而不是原始col1值。 结果是col1和col2具有相同的值。 这种行为不同于标准的SQL。

UPDATE t1 SET col1 = col1 + 1,col2 = col1;

在第二个问题上,没有任何答案,没有find关于这个问题的MySQL文档。

Mysql不是很聪明。 如果要在多个更新或插入查询中使用相同的时间戳,则需要声明一个variables。

当你使用now()函数时,系统每次在另一个查询中调用当前时间戳。

您可以在运行更新查询之前将now()的值存储在variables中,然后使用该variables更新字段last_updatelast_monitor

这将确保now()只执行一次,并且在需要的两列上更新相同的值。

你可以把下面的代码放在timestamp列的默认值上: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,所以更新两列取相同的值。

如果你真的需要确定now()具有相同的值,你可以运行两个查询(这也会回答你的第二个问题,在这种情况下,你要求update last_monitor = to last_updatelast_update还没有更新)

你可以做这样的事情:

 mysql> update table set last_update=now() where id=1; mysql> update table set last_monitor = last_update where id=1; 

无论如何,我认为MySQL是足够聪明的,每个查询只需要询问一次now()