如何用毫秒创建Mysql unix_timestamp

时间:2014-04-15 04:21:54

标签: php mysql mysqli

我有一个php函数使用mysql查询UNIX_TIMESTAMP()创建一个唯一的事务号,但是我发现如果函数循环同时,它会为Case 1生成相同的事务号,使用Case 2不是大循环的好方法。

1.我使用的交易号是用于在表格列表中对相同的交易日期进行排序。

2.我的事务表使用UUID作为PK,因为数据交叉数据库。

欲望答案如下所示。

TransNo = 1397533879.20290

PHP Version 5.3

Mysql Version 5.5

E.g。功能循环3次

案例1:

SELECT UNIX_TIMESTAMP() as TransNo;

Output : 
1397533879
1397533879
1397533879

案例2:

SELECT UNIX_TIMESTAMP() as TransNo, SLEEP(1);

Output :
1397533879
1397533880
1397533881

1 个答案:

答案 0 :(得分:0)

  

欲望答案如下所示。

     

TransNo = 1397533879.20290

如果您以current_timestamp部分的精度调用nowmicroseconds个函数,则它们会返回包含当前微秒时间的timestamp。请注意,允许的最大精度仅适用于6位数。

请参阅Fractional Seconds in Time Values

上的文档

示例1

select 
    @ts:=current_timestamp( 3 ) cts_with_milli_seconds
  , unix_timestamp( @ts ) uts_with_ts_milli_seconds;

结果1

+-------------------------+---------------------------+
| cts_with_milli_seconds  | uts_with_ts_milli_seconds |
+-------------------------+---------------------------+
| 2014-04-15 10:22:17.764 |         1397537537.764000 |
+-------------------------+---------------------------+

示例2

select 
    @nw:=now( 6 ) now_with_milli_seconds
  , unix_timestamp( @nw ) uts_with_nw_milli_seconds;

结果2

+----------------------------+---------------------------+
| now_with_milli_seconds     | uts_with_nw_milli_seconds |
+----------------------------+---------------------------+
| 2014-04-15 10:22:17.789248 |         1397537537.789248 |
+----------------------------+---------------------------+

旁注
如果仍然微秒部分匹配,则可以将RAND()附加到您的值。

RAND()的使用不能保证排序顺序。因此,除非您只需要唯一输出,否则请勿使用它。