如何仅在MySQL上使用SQL向表中添加数字?
我想使用for循环将100到9999之间的数字添加到表中。我尝试了以下查询:如何仅在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服务器版本对应的手册,以了解
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;