Php e坏信息,所以我删除了它。好的,我用正确的信息开了一张新发票。等等,它和上次的发票号码是一样的吗?还有一堆以前坏掉的发票上的坏元数据?哦,应用程序的任何部分都是直接损坏的……”这就是当您使用MAX()分配ID时等待您的内容当你认为这是一个多租户并且有一个完

Php e坏信息,所以我删除了它。好的,我用正确的信息开了一张新发票。等等,它和上次的发票号码是一样的吗?还有一堆以前坏掉的发票上的坏元数据?哦,应用程序的任何部分都是直接损坏的……”这就是当您使用MAX()分配ID时等待您的内容当你认为这是一个多租户并且有一个完,php,mysql,multi-tenant,invoice,Php,Mysql,Multi Tenant,Invoice,e坏信息,所以我删除了它。好的,我用正确的信息开了一张新发票。等等,它和上次的发票号码是一样的吗?还有一堆以前坏掉的发票上的坏元数据?哦,应用程序的任何部分都是直接损坏的……”这就是当您使用MAX()分配ID时等待您的内容当你认为这是一个多租户并且有一个完全不同的租户将被这个bug击中的机会时,有一个额外的不好的地方。我不把ID分配给Max + 1。我分配发票号码。这不是ID。你不应该删除发票。你必须(至少在西班牙)。创建一个新的发票,以纠正错误的发票。在任何情况下……如果删除发票,下一个发票号


e坏信息,所以我删除了它。好的,我用正确的信息开了一张新发票。等等,它和上次的发票号码是一样的吗?还有一堆以前坏掉的发票上的坏元数据?哦,应用程序的任何部分都是直接损坏的……”这就是当您使用
MAX()分配ID时等待您的内容当你认为这是一个多租户并且有一个完全不同的租户将被这个bug击中的机会时,有一个额外的不好的地方。我不把ID分配给Max + 1。我分配发票号码。这不是ID。你不应该删除发票。你必须(至少在西班牙)。创建一个新的发票,以纠正错误的发票。在任何情况下……如果删除发票,下一个发票号将是max(发票)+1。再次,我认为您将ID(每个记录的唯一ID)与发票号混淆了。您好,@Aayush。生成的列是否允许使用“max”()'要获取该租户的最后一个发票编号?请记住,编号列不是ID(唯一)列。谢谢,@Sammitch。因此,这似乎是第一种方法(使用“for update”)在事务内是实现这一点的最佳方式。我使用mysqli_uuu而不是PDO,因此我恐怕需要更改一些内容。所有PDO调用都应该具有mysqli等价物,正如您所说,真正的魔力在于事务中的
选择…进行更新;插入/更新
。。)据我所知,问题在于这是一个问题类似于SaaS计费系统。有一个包含多个SaaS用户实体生成的发票的
Invoice
表,OP似乎希望每个SaaS用户都有顺序发票ID。我很好奇您是否对我发布的解决方案有任何想法。[直到mariadb现在有顺序生成器]@Sammitch-意外的间隔;回滚;崩溃;获取新编号与存储新编号的原子性。您希望每个租户使用单独的编号还是所有租户使用一个序列?性能不太可能是一个问题。是否涉及复制/群集?等。将ID生成包含在事务中+
选择…进行更新
应解决t其他问题最好直接向OP澄清,但我的假设是OP希望每个用户都有自己的发票ID序列。
INSERT INTO Invoices (id, ...) VALUES (NULL, ...);
SELECT LAST_INSERT_ID();   -- specific to the conne ction