Вставка MySQL с циклом while
Я пытаюсь создать кучу записей в моей базе данных MySQL. Это одноразовое создание, поэтому я не пытаюсь создать хранимую процедуру. Вот мой код:
BEGIN
SET i = 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END
Вот ошибка:
[ОШИБКА в запросе 1] У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'SET я = 2376921001
WHILE (i <= 237692200) DO INSERT INTO coupon
(couponCod 'в строке 2
Выполнение остановлено!
Я попробовал объявление с теми же результатами. Код ниже:
BEGIN
DECLARE i INT unsigned DEFAULT 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END
Еще одна вещь, которую я пробовал, - это @i, а не только я. Такая же ошибка.
Может ли кто-нибудь увидеть, что я делаю неправильно?
Ответы
Ответ 1
Вы не можете использовать WHILE
; см. mysql DECLARE WHILE вне хранимой процедуры как?
Вы должны поместить свой код в хранимую процедуру. Пример:
CREATE PROCEDURE myproc()
BEGIN
DECLARE i int DEFAULT 237692001;
WHILE i <= 237692004 DO
INSERT INTO mytable (code, active, total) VALUES (i, 1, 1);
SET i = i + 1;
END WHILE;
END
Fiddle: http://sqlfiddle.com/#!2/a4f92/1
В качестве альтернативы, сгенерируйте список операторов INSERT
, используя любой язык программирования, который вам нравится; для одноразового создания это должно быть хорошо. Например, здесь Bash однострочный:
for i in {2376921001..2376921099}; do echo "INSERT INTO mytable (code, active, total) VALUES ($i, 1, 1);"; done
Кстати, вы сделали опечатку в своих номерах; 2376921001 имеет 10 цифр, 237692200 всего 9.
Ответ 2
drop procedure if exists doWhile;
DELIMITER //
CREATE PROCEDURE doWhile()
BEGIN
DECLARE i INT DEFAULT 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END;
//
CALL doWhile();