有没有办法知道打开特定表的会话数量

时间:2013-10-23 17:07:50

标签: mysql

我正在尝试使用php为表生成唯一的id
例如:2013-10-24-01(yyyy-mm-dd-last_index_plus_1)。
问题是,如果有两个会话同时打开php
这是访问同一个表,生成唯一ID将是相同的。
我想出了确定访问该表的会话数量的想法 然后加上该数字的last_index,
但我不知道如何用mysql完成它。
有可能吗?

由于

1 个答案:

答案 0 :(得分:0)

如评论中所述,我不确定为什么要让PHP实际执行此操作,以及为什么auto_increment不够好,但如果您需要唯一ID,则可以执行以下操作:

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

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

    < / LI>

    以上可以使用触发器在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 ;