0

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

谢谢

4

1 回答 1

0

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

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

  2. 您可以在选择最后一个已知序列时使用“选择更新”(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 ;
于 2013-10-23T21:08:43.560 回答