【问题标题】:Insert multiple rows of data in a single SQL statement [duplicate]在单个 SQL 语句中插入多行数据[重复]
【发布时间】:2015-06-14 07:24:59
【问题描述】:

我要同时插入多组数据

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 sql-insert


    【解决方案1】:

    在 SQL Server 中,您可以这样做:

    INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office"),
    ("Jane", 124, "Lloyds Office"),
    ("Billy", 125, "London Office"),
    ("Miranda", 126, "Bristol Office")
    

    【讨论】:

      【解决方案2】:

      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;
      

      这使得操作原子化,要么插入所有值,要么不插入。

      【讨论】:

        【解决方案3】:

        是的,您可以,但这取决于您使用的 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;
        

        【讨论】:

        • 谢谢!这很棒。 :)
        猜你喜欢
        • 2013-02-28
        • 2016-02-25
        • 1970-01-01
        • 2018-05-08
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多