【问题标题】:How can I create nested AUTO_INCREMENT fields in a table with MySQL?如何使用 MySQL 在表中创建嵌套的 AUTO_INCREMENT 字段?
【发布时间】:2012-03-13 11:47:02
【问题描述】:

作为我们正在制作的管理应用程序的一部分,我正在尝试尽可能多地优化 PHP 和 MySQL 代码,但我有一个顾虑...

其实我们存储客户订单的数据方案如下:

year -> DATE
order_id -> INT(11)
order_line_id -> INT(11)

我们基本上所做的是每年重置 order_id 字段(出于法律责任,您可以重置您的 id 或让它们增长,尽管客户经理通常更喜欢第一个选项而不是第二个),订单行 ID 也是如此,因此每个订单的行 ID 都会为每个连续订单重置。

然而,所有这些都是手工完成的。这远非理想,我想以正确的TM 方式进行,这将自动化该过程并将重置控制权交给 MySQL。

但问题是……如何?如何告诉 MySQL 使用每个新的 order_id 自动重置 order_line_id 的 AUTO_INCREMENT 字段,并使用每个新的自动重置 order_id 的 AUTO_INCREMENT 字段年份

【问题讨论】:

  • autoincrement 用于主键...在您的情况下,order_id 不能作为其客户端指定信息的 PK,并且与您的数据库架构的完整性无关。

标签: mysql database nested auto-increment


【解决方案1】:

好吧,据我所知,在 mysql 中,您只能在 primary_key 上设置 auto_increment,否则您必须在插入/更新字段时手动设置这些值,但这不是什么大问题。

您还可以在 mysql 中的两列上设置键,因此您可能会在 (order_id,year) 上有一个带有 auto_increment 的 primary_key。

否则,例如,order_id 将在通过您搜索 max(order_id) where year=this_year 的子查询插入时设置

【讨论】:

    【解决方案2】:

    您只能设置一个自动增量。 但是您可以设置 BEFORE INSERT 触发器来根据序列更新列。

    mysql中没有序列实体,你自己做吧。

    简单的方法是手动放置第一行,在具有序列的列上创建索引,然后使用

    select order_id+1 into new_order_id  
          from your_table_name order by order_id desc limit 1 
    

    注意,这不是 100% 正确的方法。如果你删除前一个,它会再次给出相同的 order_id。

    要获得 100% 有效的序列,您必须为其创建表并手动管理它。

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2010-09-10
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2015-03-30
      相关资源
      最近更新 更多