Php 如何用毫秒创建Mysql unix_时间戳

Php 如何用毫秒创建Mysql unix_时间戳,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个php函数,它使用mysql query UNIX_TIMESTAMP()创建一个唯一的事务号,但我发现如果函数在同一时间循环,它将为案例1生成相同的事务号,使用案例2对大型循环来说不是一个好方法 1.我使用的交易编号用于在表列表中对相同的交易日期进行排序 2.我的事务表使用UUID作为主键,因为数据跨数据库 欲望的答案如下所示,独一无二。 TransNo = 1397533879.20290 PHP版本5.3 Mysql版本5.5 例如,功能循环3次 案例1: SELECT UNIX

我有一个php函数,它使用mysql query UNIX_TIMESTAMP()创建一个唯一的事务号,但我发现如果函数在同一时间循环,它将为案例1生成相同的事务号,使用案例2对大型循环来说不是一个好方法

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

2.我的事务表使用UUID作为主键,因为数据跨数据库

欲望的答案如下所示,独一无二。

TransNo = 1397533879.20290
PHP版本5.3

Mysql版本5.5

例如,功能循环3次

案例1:

SELECT UNIX_TIMESTAMP() as TransNo;

Output : 
1397533879
1397533879
1397533879
SELECT UNIX_TIMESTAMP() as TransNo, SLEEP(1);

Output :
1397533879
1397533880
1397533881
案例2:

SELECT UNIX_TIMESTAMP() as TransNo;

Output : 
1397533879
1397533879
1397533879
SELECT UNIX_TIMESTAMP() as TransNo, SLEEP(1);

Output :
1397533879
1397533880
1397533881
欲望的答案如下,独一无二

TransNo=1397533879.20290

如果调用
current\u timestamp
now
函数的精度为
微秒
部分,则它们返回包含当前微秒时间的
时间戳
。请注意,允许的最大精度仅适用于
6
数字

请参阅有关的文档

示例1

select 
    @ts:=current_timestamp( 3 ) cts_with_milli_seconds
  , unix_timestamp( @ts ) uts_with_ts_milli_seconds;
select 
    @nw:=now( 6 ) now_with_milli_seconds
  , unix_timestamp( @nw ) uts_with_nw_milli_seconds;
结果1

+-------------------------+---------------------------+
| cts_with_milli_seconds  | uts_with_ts_milli_seconds |
+-------------------------+---------------------------+
| 2014-04-15 10:22:17.764 |         1397537537.764000 |
+-------------------------+---------------------------+
+----------------------------+---------------------------+
| now_with_milli_seconds     | uts_with_nw_milli_seconds |
+----------------------------+---------------------------+
| 2014-04-15 10:22:17.789248 |         1397537537.789248 |
+----------------------------+---------------------------+
示例2

select 
    @ts:=current_timestamp( 3 ) cts_with_milli_seconds
  , unix_timestamp( @ts ) uts_with_ts_milli_seconds;
select 
    @nw:=now( 6 ) now_with_milli_seconds
  , unix_timestamp( @nw ) uts_with_nw_milli_seconds;
结果2

+-------------------------+---------------------------+
| cts_with_milli_seconds  | uts_with_ts_milli_seconds |
+-------------------------+---------------------------+
| 2014-04-15 10:22:17.764 |         1397537537.764000 |
+-------------------------+---------------------------+
+----------------------------+---------------------------+
| now_with_milli_seconds     | uts_with_nw_milli_seconds |
+----------------------------+---------------------------+
| 2014-04-15 10:22:17.789248 |         1397537537.789248 |
+----------------------------+---------------------------+
旁注
如果仍然微秒部分太匹配,那么您可以将
RAND()
附加到您的值中


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

为什么不在php中使用微时间?哦,谢谢@Joshua Bixler,我忘了php有这个函数。但无论如何,mysql能够做到这一点吗?必须跳转到5.6版才能使用它。感谢@Ravinder,我使用Joshua Bixler提供的php microtime(),结果是1397537683.3391、1397537683.3429、1397537683.3456,如果使用RAND()不能保证顺序插入,它可以解决我的排序问题。
RAND()
建议是在微型零件匹配的情况下。是的,在使用时,排序可能会失败。否则,我的回答和文章中提到的一样有用。