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/5/sql/71.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上使用SQL向表中添加数字?_Mysql_Sql - Fatal编程技术网

如何仅在MySQL上使用SQL向表中添加数字?

如何仅在MySQL上使用SQL向表中添加数字?,mysql,sql,Mysql,Sql,我想使用for循环将100到9999之间的数字添加到表中。我尝试了以下查询: DELIMITER // BEGIN FOR phone_number IN 100..9999 LOOP INSERT INTO phones (`phoneid`,`phone`,`active`) VALUES (NULL, phone_number, "1"); END LOOP; END // 我有以下错误 1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解

我想使用for循环将100到9999之间的数字添加到表中。我尝试了以下查询:

DELIMITER //
BEGIN
   FOR phone_number IN 100..9999 LOOP
     INSERT INTO phones (`phoneid`,`phone`,`active`) VALUES (NULL, phone_number, "1");
   END LOOP;
END
//
我有以下错误

1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在100..9999循环插入到电话中时使用near'for phone_number的正确语法('ph'在第2行)


怎么了?

我认为mysql中不存在“for循环”。您可以使用以下方法:

DELIMITER //
DROP PROCEDURE IF EXISTS ins//
CREATE PROCEDURE ins()
BEGIN
DECLARE cnt INT;
   SET cnt=100;
WHILE cnt<10000 DO
  INSERT INTO phones (`phoneid`,`phone`,`active`) VALUES (NULL, cnt, "1");
  SET cnt=cnt+1;
END WHILE; 
END//
DELIMITER ;

CALL ins();
分隔符//
如果存在,则删除过程//
创建过程ins()
开始
声明cnt INT;
设置cnt=100;

而cnt即使没有存储代码,也可以生成所需的值,例如:

INSERT INTO phones (
  `phoneid`,
  `phone`,
  `active`
) 
SELECT 
  NULL, 
  n0.n+10*n1.n+100*n2.n+1000*n3.n AS num, 
  "1" 
FROM 
  (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS n0 
  CROSS JOIN 
  (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS n1
  CROSS JOIN 
  (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS n2
  CROSS JOIN 
  (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS n3
HAVING
  num>99

这些
交叉连接
将产生
0..9999
,因此您必须过滤
100
以下的值(这就是为什么它有
HAVING
子句)

循环只允许在存储程序中使用。您的代码似乎不在存储过程、函数或触发器中。未知的系统变量cnt请首先添加此
声明cnt INT;