Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何生成mysql查询,一次插入2000条记录?_Mysql - Fatal编程技术网

如何生成mysql查询,一次插入2000条记录?

如何生成mysql查询,一次插入2000条记录?,mysql,Mysql,这是我的设想 我有一张桌子 ID(PK) TYPE(PK) 01 3 02 3 03 3 04 3 现在我必须插入ID高达1000的类型3。。。 是否有自动执行该操作的选项?不确定MySQL查询,但既然您熟悉PHP,为什么不编写一个非常简单的PHP脚本,循环1000次并执行插入操作?不确定MySQL查询,但既然您熟悉PHP,为什么不编写一个非常简单的PHP脚本,循环1000次并执行插入操作插入..?使用存储过程 DELIMITER $$ CR

这是我的设想

我有一张桌子

ID(PK)  TYPE(PK)
01       3
02       3
03       3
04       3
现在我必须插入ID高达1000的类型3。。。
是否有自动执行该操作的选项?

不确定MySQL查询,但既然您熟悉PHP,为什么不编写一个非常简单的PHP脚本,循环1000次并执行插入操作?

不确定MySQL查询,但既然您熟悉PHP,为什么不编写一个非常简单的PHP脚本,循环1000次并执行插入操作插入..?

使用存储过程

DELIMITER $$

CREATE PROCEDURE insertMany(Pstart_id INT, Pend_id INT, Ptype INT)
BEGIN
  DECLARE i INT;
  IF (pstart_id > pend_id) THEN BEGIN
    SET i = PEnd_id;
    SET Pend_id = Pstart_id;
    SET Pstart_id = Pend_id;
  END; END IF;
  SET i = Pstart_id;
  WHILE I <= Pend_id DO BEGIN
    INSERT INTO table1 (id, `type`) VALUES (i, Ptype);
    SET i = i + 1;
  END; END WHILE;
END $$

DELIMITER ;

SELECT @first_id:= max(id)+1, @last_id:= max(id)+2001 FROM table1;
CALL InsertMany(@first_id, @last_id, 3);
这比使用php循环要快,因为您没有通过网络发送1000个insert查询

或者您可以看看这个问题:

使用存储过程

DELIMITER $$

CREATE PROCEDURE insertMany(Pstart_id INT, Pend_id INT, Ptype INT)
BEGIN
  DECLARE i INT;
  IF (pstart_id > pend_id) THEN BEGIN
    SET i = PEnd_id;
    SET Pend_id = Pstart_id;
    SET Pstart_id = Pend_id;
  END; END IF;
  SET i = Pstart_id;
  WHILE I <= Pend_id DO BEGIN
    INSERT INTO table1 (id, `type`) VALUES (i, Ptype);
    SET i = i + 1;
  END; END WHILE;
END $$

DELIMITER ;

SELECT @first_id:= max(id)+1, @last_id:= max(id)+2001 FROM table1;
CALL InsertMany(@first_id, @last_id, 3);
这比使用php循环要快,因为您没有通过网络发送1000个insert查询

或者你可以看看这个问题:

如果ID是一个数字:

INSERT INTO TableX
  ( ID, TYPE )
VALUES
  (1, 3) ,
  (2, 3) ,
  (3, 3) ,
  (4, 3) ,
  (5, 3) ,
  (6, 3) ;

INSERT INTO TableX
  ( ID, TYPE )
SELECT
    ID, 3
FROM
  ( SELECT
        7+ d0.ID - 1 + (d1.ID * 6) - 6 + (d2.ID * 36) - 36 + (d3.ID * 216) - 216
        AS ID
    FROM 
        TableX AS d0
      CROSS JOIN
        TableX AS d1
      CROSS JOIN
        TableX AS d2
      CROSS JOIN
        TableX AS d3
    WHERE d0.TYPE = 3 AND d0.ID <= 6
      AND d1.TYPE = 3 AND d1.ID <= 6
      AND d2.TYPE = 3 AND d2.ID <= 6
      AND d3.TYPE = 3 AND d3.ID <= 6 
  ) AS tmp
WHERE ID <= 1000 ;
如果ID是一个数字:

INSERT INTO TableX
  ( ID, TYPE )
VALUES
  (1, 3) ,
  (2, 3) ,
  (3, 3) ,
  (4, 3) ,
  (5, 3) ,
  (6, 3) ;

INSERT INTO TableX
  ( ID, TYPE )
SELECT
    ID, 3
FROM
  ( SELECT
        7+ d0.ID - 1 + (d1.ID * 6) - 6 + (d2.ID * 36) - 36 + (d3.ID * 216) - 216
        AS ID
    FROM 
        TableX AS d0
      CROSS JOIN
        TableX AS d1
      CROSS JOIN
        TableX AS d2
      CROSS JOIN
        TableX AS d3
    WHERE d0.TYPE = 3 AND d0.ID <= 6
      AND d1.TYPE = 3 AND d1.ID <= 6
      AND d2.TYPE = 3 AND d2.ID <= 6
      AND d3.TYPE = 3 AND d3.ID <= 6 
  ) AS tmp
WHERE ID <= 1000 ;
也许你可以尝试自动插入。

也许你可以尝试自动插入