我花了一天的大部分时间试图找到这个问题的答案,但似乎没有答案。我需要一个函数,它在表中创建一行,从插入的行中检索自动增量,然后使用该值在第二个表中插入另一行。功能上类似于以下 php:
$mysql_query("INSERT INTO table1 SET columns='values'");
$id = mysql_insert_id();
$mysql_query("INSERT INTO table2 SET id='$id', columns='values'");
我遇到的问题是,在我的应用程序中,所有类之间共享一个 MySQL 连接,所以我担心这可能会导致竞争条件,其中另一个类在运行第一行和第二行之间插入一行上述的。
我能想到的最简单的解决方案是使用任何函数mysql_insert_id()
打开一个新的、独特的连接,但这似乎是大量不必要的开销。我尝试过的其他答案包括插入一个唯一的值(可能是用UUID()
)并使用它而不是自动递增值,或者可能将第一个插入和调用LAST_INSERT_ID()
在存储函数中(尽管我不确定这是否可以解决可能的竞争条件)。
我也一直在研究交易,看看它们是否有帮助,但几乎找不到关于具体如何帮助的文档mysql_insert_id()
与他们互动。据我所知,他们可能不会在这里提供帮助,因为另一个INSERT
与任何事务的锁不冲突的事务仍然能够执行,并可能导致相同的竞争条件。
因此,假设我对上述任何一条都没有错误(如果错误,请纠正我),那么确保第二个 100% 的最佳方法是什么?INSERT
使用正确的值?
php脚本的执行是线性的,而不是多线程的。
因此,当一个对象与另一个对象同时执行时,不可能有一个条件
唯一可能的问题是持续连接。但无论如何,同一个连接似乎不能被 2 个单独的调用使用。即使它是持久性的,如果它已经在使用中,它就不能被另一个脚本使用。这样,也不会有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)