在单个 SQL 语句中插入多行数据
Insert multiple rows of data in a single SQL statement
我要同时插入多组数据
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 语句中插入多行。是否可以使用不同数量的值来做到这一点。
在SQL服务器中,您可以这样做:
INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office"),
("Jane", 124, "Lloyds Office"),
("Billy", 125, "London Office"),
("Miranda", 126, "Bristol Office")
Multi-row insert 自 SQL-92 以来一直是 SQL 标准的一部分,许多现代 DBMS 都支持它。这将允许你做类似的事情:
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
,列出要使用的列。我更喜欢这样,因为它可以让您不受列默认顺序的影响。
如果您的特定 DBMS 不 支持它,您可以将其作为取决于 DBMS 的事务的一部分来执行,但基本上看起来像:
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;
这使得操作成为原子操作,要么插入所有值,要么插入 none。
可以,但这取决于您使用的 SQL 品味 :),例如 mysql 和 sqlserver:
INSERT INTO Table ( col1, col2 ) VALUES
( val1_1, val1_2 ), ( val2_1, val2_2 ), ( val3_1, val3_2 );
但在甲骨文中:
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;
我要同时插入多组数据
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 语句中插入多行。是否可以使用不同数量的值来做到这一点。
在SQL服务器中,您可以这样做:
INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office"),
("Jane", 124, "Lloyds Office"),
("Billy", 125, "London Office"),
("Miranda", 126, "Bristol Office")
Multi-row insert 自 SQL-92 以来一直是 SQL 标准的一部分,许多现代 DBMS 都支持它。这将允许你做类似的事情:
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
,列出要使用的列。我更喜欢这样,因为它可以让您不受列默认顺序的影响。
如果您的特定 DBMS 不 支持它,您可以将其作为取决于 DBMS 的事务的一部分来执行,但基本上看起来像:
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;
这使得操作成为原子操作,要么插入所有值,要么插入 none。
可以,但这取决于您使用的 SQL 品味 :),例如 mysql 和 sqlserver:
INSERT INTO Table ( col1, col2 ) VALUES
( val1_1, val1_2 ), ( val2_1, val2_2 ), ( val3_1, val3_2 );
但在甲骨文中:
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;