MySQL插入数据AVOID歧义

时间:2015-11-09 10:08:09

标签: mysql multithreading mysqli insert mysql-insert-id

首先,我希望一次只有两个INSERT TABLE个数据。我知道这是不可能的。由于这个限制,我预见如果同时发生两个REQUESTS(插入数据)可能会出现问题。

当第一个表中有INSERT个数据时,有什么办法吗?第一个INSERT中没有人可以TABLE数据,因为我正在输入关系数据以避免错误的数据链接(这可能是因为我使用上述函数来获取最后插入的ID){{ 1}}。

我希望我的信息有明确的定义。如果没有,请提及它,以便我可以从头脑中发现这种可能性。在这方面,我将感谢你。

更新

示例:插图(PSEUDO代码)
(例子被添加,因为我的问题没有明确解决)

请求-1

mysqli_insert_id();

请求-2

//ClientRequest-1
1. INSERT data in table-A
2. GET INSERT-ID
3. INSERT data in table-B

CHALLENGE

如果两个请求按以下顺序(多线程请求)并行处理而没有错误(先决条件),该怎么办?

//ClientRequest-2
1. INSERT data in table-A
2. GET INSERT-ID
3. INSERT data in table-B

问题是:

01. Point # 1 of Request-1

02. Point # 1 of Request-2
03. Point # 2 of Request-2
04. Point # 3 of Request-2

05. Point # 2 of Request-1
06. Point # 3 of Request-1

请指导我,这是正确的方式还是其他任何方式。感谢你在国王的问候。

1 个答案:

答案 0 :(得分:2)

你有点困惑。所有DML操作(插入,更新,删除)都在表上保持隐式行级或表级锁定,因此即使处理以多线程方式进行,另一个DML也不会成功,除非先前的DML操作释放了锁(在你的情况下,它是INSERT)。

为了更好的可靠性,您可以考虑明确地将DML代码块放在while块中,以确保操作的原子性。