【发布时间】:2015-04-16 20:31:51
【问题描述】:
我有一个包含几家公司发票的表格,每个公司都需要有自己的递增发票编号系统。
id | invoiceId | companyId
--------------------------
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 1 | 3
我希望使用类似于 approach for MyISAM outlined here 的唯一复合键来实现这一点,但似乎使用 InnoDB 是不可能的。
我需要在插入后立即返回新 ID,如果我尝试使用 PHP 实现这一点,我担心会产生竞争条件。
创建触发器是我的最佳选择吗?如果是,那会是什么样子?我没有使用触发器的经验,我对使用after insert 触发器的研究让我对this quote from the MariaDB documentation 感到担心:
限制
您不能在视图上创建 AFTER 触发器。你不能更新 新的价值观。您不能更新旧值。
感谢您的建议
【问题讨论】:
-
你可以创建一个增量表,例如
userid int, increment int,但是使用 myisam,您必须执行全表锁定才能安全地更新值。至少使用 innodb 你有行级锁。 -
您实际上想要在 table 上使用“插入前”触发器,这样警告似乎就无关紧要了。
-
@GordonLinoff 谢谢,这给了我一个新的视角。我会调查的