mysql – SQL可以在进程中插入多行get infiltrate

Test.id是主键和自动增量

而我插入使用此SQL

 INSERT INTO Test (id,name) values (null, "a") , (null, "b") , (null, "c")

如果有人使用

 INSERT INTO Test (id,name) values (null, "d")

进程刚刚完成插入“a”

将导致(身份证,姓名)

 (1,a),(2,b),(3,c),(4,d)
  要么
 (1,a),(2,d),(3,b),(4,c)
 或其他

最佳答案 大多数SQL引擎默认不支持
Concurrent Inserts.但是,其中一些允许您在配置中允许该选项.

插件本身就是atomic声明.这意味着DB将在插入之前被锁定,并且只有在插入完成或失败后才会解锁.

例如,如果我编写这些语句并同时执行它们

INSERT INTO Test VALUES(null, 'a'), (null, 'b'), (null, 'c'), (null, 'd')

INSERT INTO Test VALUES(null, 'e'), (null, 'f')

基本上发生的是race condition.所以我的输出可以是

1 a, 2 b, 3 c, 4 d, 5 e, 6 f

要么

1 e, 2 f, 3 a, 4 b, 5 c, 6 d

我甚至可以使用INSERT SELECT语句,它将锁定数据库,直到语句完全完成.

INSERT INTO Test select * from test2

因此,在您的情况下,一旦第一个查询开始运行,下一个查询将不得不等待,因此输出将是

(1,a) , (2,b) , (3,c) , (4,d)
点赞