我有一个webapp,当前将所有用户的搜索存储到search_log表中。我现在要创建另一个名为results_log的表,其中存储了我们提供给用户的所有结果。 search_log表包含名为id_search的主键,并且结果日志表具有外键id_search和另一个字段id_result。 id_searched字段是两个表中的auto_incrementing字段。MySQL插入竞争条件
在我的web应用程序,我会做插件在这个顺序:
insert into search_log table
insert into result_log table
我担心这可能会导致竞争条件。如果用户A和用户B都完成web应用程序,并在大约同一时间到达这部分代码,是有可能的是,为了将去:
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查询插入到两个表中吗?这可能吗?
我认为这样做,但如果用户A插入到search_log表中,然后在可以查询最后一个插入ID之前,用户B将插入到search_log表中。我可以结束与两个用户具有相同的search_id权利? – user387049 2010-10-14 16:07:52
你不会“查询”最后一个插入ID,它是一个MySQL函数。它返回会话中最后一个插入的插入ID。 – 2010-10-15 20:54:38