MySQL 插入数据避免歧义
MySQL insert data AVOID Ambiguity
首先,我想一次 INSERT
两个 TABLE
数据。我知道这是不可能的。由于这个限制,我预见到如果同时发生两个 REQUESTS
(插入数据)可能会出现问题。
有什么办法可以让我INSERT
的数据在第一个table。没有人可以在第一个 TABLE
中 INSERT
数据,因为我正在输入关系数据以避免错误的数据链接(这可能是因为我正在使用提到的函数来获取最后插入的 ID)mysqli_insert_id();
.
更新
示例: 插图(伪代码)
(由于我的问题没有明确解决,添加了示例)
REQUEST-1:
//ClientRequest-1
1. INSERT data in table-A
2. GET INSERT-ID
3. INSERT data in table-B
REQUEST-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
这是正确的方法还是其他方法?
你有点糊涂了。所有 DML 操作(插入、更新、删除)都在 table 上持有隐式行级或 table 级锁,因此即使处理以多线程方式发生,另一个 DML 也不会成功,除非获得锁由之前的 DML 操作(在您的例子中是 INSERT)释放。
为了获得更好的可靠性,您可以考虑将 DML 代码块显式放置在 TRANSACTION
块中,以确保操作的原子性。
首先,我想一次 INSERT
两个 TABLE
数据。我知道这是不可能的。由于这个限制,我预见到如果同时发生两个 REQUESTS
(插入数据)可能会出现问题。
有什么办法可以让我INSERT
的数据在第一个table。没有人可以在第一个 TABLE
中 INSERT
数据,因为我正在输入关系数据以避免错误的数据链接(这可能是因为我正在使用提到的函数来获取最后插入的 ID)mysqli_insert_id();
.
更新
示例: 插图(伪代码)
(由于我的问题没有明确解决,添加了示例)
REQUEST-1:
//ClientRequest-1
1. INSERT data in table-A
2. GET INSERT-ID
3. INSERT data in table-B
REQUEST-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
这是正确的方法还是其他方法?
你有点糊涂了。所有 DML 操作(插入、更新、删除)都在 table 上持有隐式行级或 table 级锁,因此即使处理以多线程方式发生,另一个 DML 也不会成功,除非获得锁由之前的 DML 操作(在您的例子中是 INSERT)释放。
为了获得更好的可靠性,您可以考虑将 DML 代码块显式放置在 TRANSACTION
块中,以确保操作的原子性。