在MySQL的"INSERT"语句中使用"LIMIT"?

7

我能在MySQL INSERT查询中使用LIMIT 2吗?例如:

INSERT INTO MyTable
   (user_name,password)
VALUES
   (john,366543),
   (sam,654654)
LIMIT 2

我尝试了,它显示:

`#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 2' at line 1`
7个回答

9
您可以使用INSERT ... SELECT语法来实现此操作:
INSERT INTO MyTable (user_name, password)
SELECT 'john', '366543'
UNION ALL SELECT 'sam', '654654'
LIMIT 2;

不确定你为什么想这样做。也许如果你有一个很长的静态值列表,你希望通过设置限制来轻松控制?

正如pst在一个现已删除的评论中指出的那样,LIMIT实际上是SELECT的一部分,与INSERT本身无关。


1
你认为这很明显,对吧?如果你想限制插入的数据量,那就不要提供那么多值。在 INSERT INTO ... SELECT FROM 中使用 LIMIT 就像这里演示的那样是相关的。 - tadman
LIMIT也可以与UPDATE和DELETE一起使用,因此它不仅仅是SELECT的一部分。 - Andrew

1

1
大多数情况下,如果我们要从另一张表中插入数据,那么我们需要设置限制来插入特定数量的数据。
     insert into cas_user (cas_name) select cas_name from users limit 1,5;

希望这能有所帮助。

0

LIMIT 2 只能与某些无值的选择一起使用


0
如果您想部分复制现有表格,可以按照以下步骤操作(我需要在该表格上运行一些测试)。
CREATE TABLE copy SELECT * FROM source_table LIMIT 1000;

你当然可以使用临时表将数据从一个表复制到另一个表。

CREATE TEMPORARY TABLE copy SELECT * FROM source_table LIMIT 1000;
INSERT INTO target_table SELECT * FROM copy;
DROP TABLE copy;

-1

我知道这是一个旧帖子,但你可以使用foreach循环来限制插入语句。类似这样:

    $i = '1';   
    foreach($item as $item){
        IF($i <= '2'){
            IF ($stmt = $connection->prepare("INSERT IGNORE INTO `db`.`table`( `item`) VALUES (?)")) {

                /* Bind our params */
                $stmt->bind_param('s' , $item);

                $stmt->execute();

                $stmt->close();
            }
        }
        $i++;
    }

-3

不可以在插入查询中使用 limit


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接