为什么此代码为每次调用返回相同的UNIX_TIMESTAMP()值?
DECLARE myStamp1 FLOAT;
DECLARE myStamp2 FLOAT;
DECLARE n INT;
SET myStamp1 = UNIX_TIMESTAMP();
SELECT SLEEP(1) INTO n;
SET myStamp2 = UNIX_TIMESTAMP();
SELECT myStamp1, myStamp2;
最佳答案 FLOAT数据类型只有23位的尾数,基本上相当于精度的七位小数. (是的,从技术上讲,限制更精确地指定为六位数.)但重点是FLOAT表示精度不超过七位小数.
现在,UNIX_TIMESTAMP()函数返回十位十进制数的整数值.因此,一秒钟的更改只会改变第10个(最低阶)十进制数字(或将9翻转为0).但这并不足以产生不同的FLOAT值. (最终,FLOAT的值会改变,但任何一秒的差异都不太可能导致不同的FLOAT值.)
我建议您尝试使用BIGINT,DECIMAL(10,0)或TIMESTAMP数据类型,或者如果需要(?)浮点类型的可伸缩性,请使用DOUBLE.
摘自MySQL文档
<剪断>
返回当前日期或时间的函数在查询执行开始时每个查询仅评估一次.这意味着在单个查询中对诸如NOW()之类的函数的多次引用总是产生相同的结果. (对于我们的目的,单个查询还包括对存储程序的调用(存储的例程,触发器或事件)以及该程序调用的所有子程序.)此原则也适用于CURDATE(),CURTIME(),UTC_DATE() ,UTC_TIME(),UTC_TIMESTAMP(),以及他们的任何同义词.
< /剪断>
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
(您显示的代码必须位于存储的程序中,因为DECLARE语句仅在存储的程序中有效.)