我可以在一个查询中从UNIX_TIMESTAMP获得两个不同的结果吗?

时间:2011-05-20 19:56:24

标签: mysql unix-timestamp

这似乎是一个显而易见的事情,但我只是不确定正确答案。

如果我在单个 mysql查询中使用INSERT / UPDATE命令,我可以从UNIX_TIMESTAMP获得两个不同的结果吗?也就是说,在一次查询期间,时间是否会改变

示例:

UPDATE my_table SET
time1 = UNIX_TIMESTAMP(),
...
...
time2 = UNIX_TIMESTAMP(),
...

time2是否可能大于time1

(对于任何想要将两列设置为相同值有什么好处的人 - 我正在使用一个添加和时间更新以便我可以只排列一列)

如果可能,请提供一些背景信息以供您回答。谢谢!

3 个答案:

答案 0 :(得分:3)

MySQL时间& date函数返回语句开头的时间/日期,所以如果你这样做:

CREATE TABLE t ( x INT );
INSERT INTO t SELECT UNIX_TIMESTAMP() FROM (10M rows table)  -- takes several seconds
SELECT DISTINCT x FROM t;

DISTINCT返回一个值,该值对应于INSERT开始执行的时间。

答案 1 :(得分:1)

我不知道你问题的答案。但是,假设您的动机是在写入表时获得一致的时间戳,为什么不采取以下方法:创建存储过程。在此过程中,使用UNIX_TIMESTAMP()分配给变量,并使用变量执行UPDATEINSERT查询,而不是进一步调用UNIX_TIMESTAMP()。这样你就可以保证正确的行为。

示例:

CREATE PROCEDURE "My_Insert_Procedure" ()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN

DECLARE my_time DATETIME;
SET my_time = UNIX_TIMESTAMP();

UPDATE my_table SET
time1 = my_time,
...
...
time2 = my_time,
...

END

CALL My_Insert_Procedure();

答案 2 :(得分:1)

在mysql中,unix_timestamp()与now()类似 - 它返回语句开始执行时的时间,与sysdate()不同,后者返回执行函数本身的时间。

CREATE TABLE test ( date datetime, tstamp int(11) );
INSERT INTO test VALUES( 0,0 ), ( 0,0 ), ( 0,0 );
UPDATE test SET date=sysdate(), tstamp=unix_timestamp() WHERE !sleep(2);
+---------------------+------------+
| date                | tstamp     |
+---------------------+------------+
| 2011-05-20 22:39:58 | 1305923996 |
| 2011-05-20 22:40:00 | 1305923996 |
| 2011-05-20 22:40:02 | 1305923996 |
+---------------------+------------+