【问题标题】:Add Prefix to auto-increment in mysql db在 mysql db 中为自动增量添加前缀
【发布时间】:2011-08-24 20:54:23
【问题描述】:

我的数据库带有表 test1。 它有一个自动递增的主 ID“Id”。 现在 id 的格式是 1,2,3...。 .是否可以将主要ID存储为 PNR1,PNR2,PNR3 ... .依此类推(自动递​​增)。

【问题讨论】:

标签: php mysql


【解决方案1】:

没有。在查询中添加前缀,或者改用视图。

【讨论】:

  • @IVA - 感谢您的回复。会这样做
【解决方案2】:

并非如此,但您可以使用另一列(但视图) 这已经在这里介绍了: MySQL Auto Increment Custom Values

【讨论】:

    【解决方案3】:

    是的,如果你有 INT 前缀,你可以这样做。您在表中的 id 为 INT

     // START PREFIX
      $query = mysql_query("SELECT id FROM `table_name` ORDER BY id DESC LIMIT 1"); 
      // GET THE LAST ID MAKE SURE IN TABLE YOU 9991
    
      while ($row = mysql_fetch_object($query)) {
        $lastId =  $row->id;
      }
    
      list($prefix,$Id) = explode('999',$lastId );
      $Id = ($Id+1);
      $new_id = '999'.$Id;
      // END PREFIX
    
    
    
    $insertQuery = mysql_query("INSERT INTO `table_name` SET id = '".$new_id."',...");
    

    【讨论】:

      【解决方案4】:

      嗨,我是这样设计的:

      产品表(产品):

      id_prod(varchar(11), NOT NULL, PK), name(varchar(40))
      

      产品序列表(productidseq):

      id(AI, PK, NOT NULL)
      

      在产品表中插入触发器之前:

      CREATE DEFINER=`root`@`localhost` TRIGGER `dbname`.`products_BEFORE_INSERT` BEFORE INSERT ON `products` FOR EACH ROW
      BEGIN
      insert into productidseq (id) values(NULL);
      set new.id_prod = concat('PROD or any prefix here',last_insert_id());
      set @productId = new.id_prod; -- To use outside of trigger this variable is useful.
      END
      

      当您运行以下查询时:

      insert into products (name) values('Bat');
      

      表格内的数据我们会是这样的:

      产品:

      id | name
      ---|-----
       1 | Bat
      

      productidseq:

      id 
      ---
       1 
      

      如果有比这更好的方法或任何缺点,请在下面发表评论。谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        相关资源
        最近更新 更多