MySQL插入竞争条件

MySQL插入竞争条件,mysql,Mysql,我有一个webapp,它当前将用户的所有搜索存储到搜索日志表中。现在我想创建另一个名为results_log的表,它存储我们提供给用户的所有结果。搜索日志表包含名为id\u search的主键,结果日志表包含外键id\u search和另一个字段id\u result。在这两个表中,id_搜索字段都是自动递增字段 在我的web应用程序中,我会按以下顺序插入: insert into search_log table insert into result_log table 我担心这会导

我有一个webapp,它当前将用户的所有搜索存储到搜索日志表中。现在我想创建另一个名为results_log的表,它存储我们提供给用户的所有结果。搜索日志表包含名为id\u search的主键,结果日志表包含外键id\u search和另一个字段id\u result。在这两个表中,id_搜索字段都是自动递增字段

在我的web应用程序中,我会按以下顺序插入:

  insert into search_log table
  insert into result_log table
我担心这会导致比赛状态。如果用户A和用户B都完成了webapp,并且几乎同时达到了代码的这一部分,那么订单是否可能会继续:

  User A -> Insert into search_log
  User B -> Insert into search_log
  User B -> Insert into result_log
  User A -> Insert into result_log
由于这两个表在id_搜索字段上都是自动递增的,我担心用户A和用户B的数据会被交换。我还考虑过查询id_搜索,但这似乎是一个更糟糕的解决方案

我的问题是: -有没有办法解决这个竞赛条件?
-一个解决方案是使用一个SQL查询插入两个表吗?这是可能的吗?

如果这些表是相关的,那么在插入时应该包含自动递增ID。插入搜索日志后,获取最后一个插入ID,无需查找。然后将其作为另一个字段包含在结果日志搜索中


永远不要依赖不同表中相同的自动增量ID。

我考虑过这样做,但是如果用户A插入到搜索日志表中,然后在我可以查询最后一个插入ID之前,用户B插入到搜索日志表中会怎么样。我可能会得到两个用户具有相同的搜索id,对吗?你不需要“查询”最后一个插入id,它是一个MySQL函数。它返回会话中最后一次插入的插入ID。