1

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

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


                  <strong>更新

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


请求 1

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

请求 2

//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

问题是:

When Points 02,03,04 get executed, will the insert_id get affected for Request-1

这是正确的方法还是其他方法?

4

1 回答 1

2

你有点困惑。所有 DML 操作(插入、更新、删除)在表上都持有一个隐式行级或表级锁,因此即使处理以多线程方式发生,另一个 DML 也不会成功,除非该锁被先前的 DML 操作释放(在您的如果是插入)。

为了获得更好的可靠性,您可以考虑将 DML 代码块TRANSACTION显式放置在块内,以确保操作的原子性。

于 2015-11-09T12:30:06.493 回答