我有一个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查询插入到两个表中?这可能吗?
答案 0 :(得分:1)
如果这些表是相关的,那么您应该在插入时包含自动增量ID。插入search_log后,获取最后一个插入ID,不需要查找。然后在result_log搜索中将其包含在另一个字段中。
永远不要依赖不同表中的自动增量ID相同。