就像在表中插入表的当前状态并在其中插入行,或者只是直接向上插入该行不关心表的状态?

我之所以问这个,是因为我不确定并发插入行同时发生时会发生什么。

我脑海中扮演的场景是,每个插入行都采用表的初始状态并将一行插入桌子,并且由于它们同时发生,所以发生了种族条件,并且插入的行最后覆盖了插入在另一行中,我不想发生这种情况。

这是对发生的事情的正确理解吗?

对于更多上下文,我正在使用MySQL,并想象这些行不会彼此冲突,因为它们是独特的约束或任何问题,它们都是成功的插入物。

例如: 我有这个空表

CREATE TABLE IF NOT EXISTS test_table (
                    testOne INT,
                    testTwo VARCHAR(255),
                    PRIMARY KEY (testOne)
                );

这两个插入语句同时发生,

INSERT IGNORE INTO test_table (testOne, testTwo)
            VALUES (1, "two");
INSERT IGNORE INTO test_table (testOne, testTwo)
            VALUES (2, "three");

桌子只会插入1行吗? 由于每个插入语句的初始状态是一个空表,并且根据插入语句的最后状态,最后将覆盖另一个插入语句,仅插入1行

我已经尝试打开4个终端,并且刚刚开始插入一行数据,这些数据不会同时彼此冲突。 之后,我得到了插入9688的行数,四个终端中每个终端的数据的行与:2422相同的行数:这意味着没有发生比赛条件,并且在此测试中所有插入都成功。 我测试了3次,并得到了相同的结果,所以我假设在我的脑海中扮演的场景应该是错误的,但是您永远不确定,所以我在此方面寻求经验丰富的建议,因为我不太熟悉与SQL

分析解答

两个INSERT语句将在单独的事务中分别执行。这意味着插入物将彼此独立执行。通常,MySQL将保证每笔交易将成功执行。您的第二个语句覆盖第一个INSERT的结果的唯一方法是,如果第二个语句是更新或删除,而不是另一个INSERT