多个表格中的自动递增ID(确认ACID)

时间:2019-08-06 19:56:11

标签: mysql sql mariadb

有多个类似的问题,但没有一个归结为ACID。

顺便说一句:这是一个普遍的问题,不需要代码或内容即可理解。

2个表:OrderHeader和OrderItem。

Order标头具有一个主键(order_number),而order_number需要以某种方式“自动递增”。 订单商品具有主键(order_number,item_number)。

很明显,无论哪种情况,两个表的order_number必须相同。

我阅读了有关存储过程的解决方案“ SELECT LAST_INSERT_ID();”。等等。

但是,如果能完全满足ACID的要求,并且我无法自行测试这种情况,我将找不到任何信息。我找不到任何信息,详细信息是自动增量序列如何工作,如果那取决于会话还是如此。

如果我输入订单和商品数据,则需要确保获得的自动递增ID是“我的ID”的100%。 last_insert_id()听起来像是提供了最后一个,但不一定是我的。

我不是在谈论可能性。我说的是对的,并且始终有效。因此,如果像1000个其他用户一样同时单击“保存”按钮,则提供最后一个ID而不提供我的ID的功能是错误的。花费几毫秒或更少的时间进行一次操作的可能性有多么小,取决于可能性的解决方案对我来说是个废话。

如果last_insert_id()只是最后一个(可能是另一个保存数据的用户),那么也许您就已经有了一个ACID规范,知道它如何工作。

我自己的想法和目标是: 我相信在这种情况下,MariaDB中的自动增量功能没有用(我只是假设,因为我不知道last_insert_id()的内部逻辑) 话虽如此,我将为ID创建自己的表 按下“保存”按钮后, 步骤1:开始新交易 步骤2:锁定包含我的“将要递增” ID的整个表 第3步:将ID增加一并获得进一步使用 第4步:释放ID表上的锁(这样其他用户也可以获取他们的锁) 步骤5:在我拥有的所有表格中使用该ID 步骤6:提交工作。

如果我在交易期间回滚,我可能会丢失ID。没关系。

如果您能给我您的想法,我将不胜感激。 我对SQL和数据库非常陌生。至少我要说的是,由于25年的SAP编程经验从未使您了解核心数据库问题和功能。这一切都由SAP解决,您只需调用其功能即可。 但是我想这是唯一的专业解决方案(而且mySQL或MariaDB自动增量功能非常差): how SAP solved it

0 个答案:

没有答案