这似乎是一个显而易见的事情,但我只是不确定正确答案。
如果我在单个 mysql查询中使用INSERT
/ UPDATE
命令,我可以从UNIX_TIMESTAMP
获得两个不同的结果吗?也就是说,在一次查询期间,时间是否会改变?
示例:
UPDATE my_table SET
time1 = UNIX_TIMESTAMP(),
...
...
time2 = UNIX_TIMESTAMP(),
...
time2
是否可能大于time1
?
(对于任何想要将两列设置为相同值有什么好处的人 - 我正在使用一个添加和时间更新以便我可以只排列一列)
如果可能,请提供一些背景信息以供您回答。谢谢!
答案 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()
分配给变量,并使用变量执行UPDATE
或INSERT
查询,而不是进一步调用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 |
+---------------------+------------+