使用select last_insert_id生成唯一的id


Using select last_insert_id to generate unique ids

在阅读了Stackoverflow上的可能选项后,我看不到我正在考虑的确切情况的答案。。。

案例:我有一个php系统,可以自动生成mysql连接的模板。

为了让系统正常工作,我需要每个生成的模板在创建时都分配一个唯一的6位数整数。而不是扰乱随机发生器等…

A) 我可以简单地在数据库中创建一个名为"pageid"的表,其int(11)/unique/autoincrement起始值为100000,然后在模板创建过程中,简单地对该表执行插入,然后使用"select last_insert_id()"提取最后一个值,然后在创建模板时将其注入到模板中吗?(换句话说,表的唯一功能是生成并吐回最后一个唯一的id)。

B) 如果是的话,使用这种方法有什么问题需要我关心吗?(除此之外,这意味着只能生成89999个模板,这在本例中不是问题)。

任何想法或更好的方法都值得赞赏。。。

  1. 我可以简单地在数据库中创建一个名为"pageid"的表,其int(11)/unique/autoincrement起始值为100000,然后在模板创建过程中,简单地对该表执行插入,然后使用"select last_insert_id()"提取最后一个值,然后在创建模板时将其注入到模板中吗?(换句话说,表的唯一功能是生成并吐回最后一个唯一的id)。

    是:

    CREATE TABLE pages (
      pageid MEDIUMINT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY
    ) AUTO_INCREMENT = 100000;
    

    请注意,我使用MEDIUMINT(6),因为它比INT需要少1个字节的存储空间,并且具有更适合您需要的显示宽度。

  2. 如果是的话,使用这种方法有什么问题需要我关心吗?(除此之外,这意味着只能生成89999个模板,这在本例中不是问题)。

    相反,您可以将该列放在templates表中,并在插入新记录时自动分配id