我即将编写几个MySQL表来处理发票。2个auto_increment字段,其中1个重置
我的计划是打入3代主要表这样的:
create table invoice
(
id auto_increment,
client (foreign key),
created (date),
*etc*...
)
create table products
(
id auto_increment
*product info*...
)
create table invoice_products
(
invoice_id (references invoice.id)
row (resetting auto_increment) <--THIS!!!
product_id(references products.id)
product_quantity INT
primary key (invoice_id,row)
)
的困境是,创建一个新的发票时,invoice.id被auto_incremented,这是因为它应该是。我想要的是invoice_products.row从每个新发票的1开始。 因此,对于每个新发票,行auto_increment将从1开始,但如果将新行添加到现有发票ID,行ID将从其停止的位置继续。
有关如何完成此任务的任何建议?
(我希望代码的短版是足以让你明白的窘境)
预先感谢任何建议!
编辑:澄清:数据库中的所有表都InnoDB的
我认为你正在尝试混合*数据库设计*和*演示*。只需在检索发票行后添加行号,否? –
MyISAM引擎可以做到这一点 - 完全符合您的设计('主键(invoice_id,row)')。如果您使用InnoDB,则必须在代码中执行(SQL或应用程序)。 –
@GuillaumePoussel:唯一的困难就是无法检查一致性。并且没有可靠的方法来引用发票上的特定行。有可能一张发票有几行相同的产品,甚至相同的数量。 – user2879867