MySQL插入竞争条件

时间:2010-10-14 15:28:23

标签: mysql

我有一个webapp,它目前将所有用户的搜索存储到search_log表中。我现在想要创建另一个名为results_log的表,它存储我们提供给用户的所有结果。 search_log表包含一个名为id_search的主键,结果日志表包含外键id_search,另一个字段包含id_result。 id_searched字段是两个表中的auto_incrementing字段。

在我的网络应用程序中,我会按顺序执行插入操作:

  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_search字段上进行auto_incrementing,我担心用户A和用户B将交换数据。我也考虑过查询id_search,但这似乎是一个更糟糕的解决方案。

我的问题是:    - 有没有办法解决这种竞争条件?    - 一个解决方案是否可以通过一个SQL查询插入到两个表中?这可能吗?

1 个答案:

答案 0 :(得分:1)

如果这些表是相关的,那么您应该在插入时包含自动增量ID。插入search_log后,获取最后一个插入ID,不需要查找。然后在result_log搜索中将其包含在另一个字段中。

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