就像在表中插入表的当前状态并在其中插入行,或者只是直接向上插入该行不关心表的状态?
我之所以问这个,是因为我不确定并发插入行同时发生时会发生什么。
我脑海中扮演的场景是,每个插入行都采用表的初始状态并将一行插入桌子,并且由于它们同时发生,所以发生了种族条件,并且插入的行最后覆盖了插入在另一行中,我不想发生这种情况。
这是对发生的事情的正确理解吗?
对于更多上下文,我正在使用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
。