2012-03-13 102 views
0

作为我们正在制定的管理应用程序的一部分,我试图优化尽可能多的PHP和MySQL代码,但我有一个担心...如何在MySQL表中创建嵌套的AUTO_INCREMENT字段?

实际上,我们的数据方案用于存储客户端订单如下:

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

我们基本上做的是每年重置ORDER_ID领域(法律,并为问责制的目的,您可以重置您的ID或只是让他们成长,虽然客户经理通常倾向于第一种什么选项而不是第二个选项),对于订单行ID也是如此,因此每个订单都会为每个连续订单重置其行ID。

但是,所有这些都是手工完成的。这非常不理想,我希望通过适当的方式来实现,这将使过程自动化,并将重置控制交给MySQL。

但问题是......怎么样?我该如何告诉MySQL自动重设的AUTO_INCREMENT领域order_line_id每个新ORDER_ID和自动重设的AUTO_INCREMENT领域ORDER_ID每个新

+1

autoincrement是主键...在你的情况下,order_id不能作为客户指定信息的PK,也没有任何关于你的数据库模式的完整性。 – Rufinus 2012-03-13 11:52:25

回答

1

很好,只要我知道,在mysql中,你只能对primary_key auto_increment的,否则你必须插入/更新现场时manualy设置这些值,但是这不是太大的问题。

你也可以在mysql的两列上有键值,所以你可能在(order_id,year)上有一个带有auto_increment的primary_key。

否则ORDER_ID,例如,将通过在那里你搜索最大(ORDER_ID),其中今年一子查询插入时设置= THIS_YEAR

0

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

在mysql中没有序列实体,所以你自己做。

容易的方法是把第一行manualy,创建与顺序列索引,并使用

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

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

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