在单个 SQL 语句中插入多行数据
在单个 SQL 语句中插入多行数据
这个问题在这里已经有了答案:
我有多组数据需要同时插入
INSERT INTO MyTable VALUES ("John", "Doe", 1234567890, "employee", ""); INSERT INTO MyTable VALUES ("Susen", "Gupta", 1234567890, "leander"); INSERT INTO MyTable VALUES ("Karn", "Share", 1234567890, "employee", "home");
我想在一条SQL语句中插入多行数据。并且可以使用不同数量的值吗?
admin 更改状态以发布 2023年5月21日
可以。但取决于你使用的SQL口味。例如,在MySQL和SQLServer中:
INSERT INTO Table ( col1, col2 ) VALUES ( val1_1, val1_2 ), ( val2_1, val2_2 ), ( val3_1, val3_2 );
但在Oracle中:
INSERT ALL INTO Table (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3') INTO Table (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3') INTO Table (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3') . . . SELECT 1 FROM DUAL;
多行插入自SQL-92标准以来已是SQL标准的一部分,许多现代数据库管理系统都支持多行插入。这将使您能够执行以下操作: p>
insert into MyTable ( Name, Id, Location) values ('John', 123, 'Lloyds Office'), ('Jane', 124, 'Lloyds Office'), ('Billy', 125, 'London Office'), ('Miranda', 126, 'Bristol Office');
您会注意到我在那里使用了insert into
的完整形式,列出要使用的列。我更喜欢这个选项,因为它使您免于默认列顺序的限制。
如果您特定的数据库管理系统不支持它,则可以将其作为依赖于数据库管理系统但基本上看起来像以下的事务的一部分执行:
begin transaction; insert into MyTable (Name,Id,Location) values ('John',123,'Lloyds Office'); insert into MyTable (Name,Id,Location) values ('Jane',124,'Lloyds Office'), insert into MyTable (Name,Id,Location) values ('Billy',125,'London Office'), insert into MyTable (Name,Id,Location) values ('Miranda',126,'Bristol Office'); commit transaction;
这使该操作是原子的,即全部插入或不插入。