2013-10-23 68 views
0

我想生成一个表使用php的唯一ID
例如:2013-10-24-01(yyyy-mm-dd-last_index_plus_1)。
问题是,如果有两个会话同时打开访问同一个表的php
,则生成唯一标识将与它们相同。
我想出了一个想法,即确定访问该表的会话数
然后再加上该数字的last_index,
但我不知道如何用mysql来完成它。
是否有可能?有没有办法知道有多少会话,打开一个特定的表

感谢

+2

有一些原因,你没有使用汽车公司和说日期插入。 –

+0

尝试在表格中插入唯一ID。如果因重复密钥而失败,请增加索引并重试。 – Barmar

回答

0

正如评论指出,我不知道你为什么要PHP真正做到这一点,为什么AUTO_INCREMENT不够好,但如果你需要一个唯一的ID,你可以做到以下几点:

  1. 确保在要插入的列上添加唯一键 - 如果出现问题,数据库将确保您不会获得两个完全相同的键。从理论上讲,您可以尝试,直到查询成功从PHP

  2. 当您选择最后一个已知序列时,您可以使用“select for update”(http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html)以确保另一个进程在插入之前不会尝试读取。

以上是可以使用触发器在mysql中的事,因为你没有提供任何结构,下面的只是如何能看一个例子。它使用序列表来选择最后一个id,并使用mysql date_format函数来格式化插入的日期。

delimiter | 
create trigger `trigger_name` 
    before insert on `table_name` 
    for each row begin 
     set new.last_id = concat(date_format(now(), '%y-%m-%d'), '-', (select max(id) from `sequence_table` for update)); 
end| 

delimiter ; 
相关问题