Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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循环和插入_Mysql - Fatal编程技术网

Mysql循环和插入

Mysql循环和插入,mysql,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;

我有以下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;
此脚本不工作,但应选择表1中的所有id和名称。我使用一个循环,因为我还将在这些循环中做其他事情,但这是为了以后。 我不是在寻找一个解决方案,如选择id,从表1的名称,但我希望我的错误修复。所以我可以继续我的循环

我得到的错误是:

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 接近'loop1:循环插入到可诱惑id、名称选择id、名称 从第1行的表1'开始


对于循环的语法,请尝试以下方法:

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

使用SET@count=@count+1增加循环中的计数器

为循环的语法尝试以下方法:

DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
    /*your database query logic*/
END
使用SET@count=@count+1增加循环中的计数器

代码中存在语法错误,LIMIT@skip是动态SQL,需要一些技巧才能工作,但它不在loop1:loop

我猜您正在尝试在复合语句BEGIN之外使用循环。。。像存储过程一样结束,这是不可能的。您必须创建一个存储过程来执行此操作。

您的代码中有一个语法错误LIMIT@skip,它是动态SQL,需要一些技巧才能工作,但它不在loop1:LOOP

/* 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();

我猜您正在尝试在复合语句BEGIN之外使用循环。。。像存储过程一样结束,这是不可能的。你必须创建一个存储过程才能做到这一点。

我不知道,我正在尝试使其工作,但我不确定。我不知道,我正在尝试使其工作,但我不确定。那将是最肯定的情况,事务也可以使用循环吗?不,它上面说:存储过程和函数,触发器,和事件。最肯定的情况是,事务也可以使用循环吗?不,它上面写着:存储过程和函数、触发器和事件。这是一个很好的解决方案。为什么在这里显式使用用户变量?这是一个很好的解决方案。为什么在这里显式使用用户变量?通常只使用代码。试着添加一个。谢谢。虽然遗漏了一些解释,但我高度赞赏这个A-Z解决方案——它是开箱即用的。只有代码的答案通常是正确的。试着添加一个。谢谢。虽然我错过了一些解释,但我高度赞赏这个A-Z解决方案——它是开箱即用的。
/* 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();