Mysql循环和插入

Syn*_*der 1 mysql

我有以下MySql脚本:

SET @skip = 0;
SET @max = (SELECT COUNT(*) FROM table1);

CREATE TEMPORARY TABLE TempTable(
   id INT NOT NULL,
   name VARCHAR(32) NOT NULL
);

loop1: LOOP
  INSERT INTO TempTable (id, name) SELECT id, name FROM table1 LIMIT @skip, 1;

  IF @skip < @max THEN
    SET @skip = @skip + 1;
    ITERATE loop1;
  END IF;
  LEAVE loop1;
END LOOP loop1;

SELECT * FROM TempTable;
Run Code Online (Sandbox Code Playgroud)

此脚本无效,但应选择所有ID和名称table1.我正在使用一个循环,因为我也会在这些循环中做其他的东西,但这是为了以后.我不是在寻找类似的解决方案,SELECT id, name FROM table1但我希望我的错误得到修复.所以我可以继续我的循环.

我得到的错误是:

1064 - 您的SQL语法出错; 检查与MySQL服务器版本对应的手册,以便在'loop1:LOOP INSERT INTO TempTable(id,name)SELECT id,name FROM table1'在第1行附近使用正确的语法

Pro*_*mer 6

尝试这样的循环语法:

DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
    /*your database query logic*/
END
Run Code Online (Sandbox Code Playgroud)

使用"SET @count =(@ count + 1)"在循环中递增计数器


小智 6

/* set delimiter */
DELIMITER $$

/* remove procedure if exists... */
DROP PROCEDURE IF EXISTS insert_it $$

/* create procedure */ 
CREATE PROCEDURE insert_it ()
BEGIN
DECLARE varcount INT DEFAULT 1;
DECLARE varmax INT DEFAULT 15;

WHILE varcount <= varmax DO
    INSERT INTO yourtable(fixed_val, count_val) VALUES(3493, varcount);
    SET varcount = varcount + 1;
END WHILE;

END $$

/* reset delimiter back to normal */
DELIMITER ;

/* call procedure */ 
CALL insert_it();
Run Code Online (Sandbox Code Playgroud)

  • 仅代码答案通常[不赞成](http://meta.stackoverflow.com/q/258673/2596334).尝试添加[探索或代码评论](http://meta.stackoverflow.com/q/269981/2596334).谢谢. (3认同)