J'essaie de créer un tas d'enregistrements dans ma base de données MySQL. Il s’agit d’une création unique, donc je n’essaie pas de créer une procédure stockée. Voici mon code:
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
Voici l'erreur:
[ERREUR dans la requête 1] Vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de 'SET i = 2376921001 Tandis que (i <= 237692200) INSERER DANS coupon
(couponCod') à la ligne 2 Exécution arrêtée!
J'ai essayé un Declare avec les mêmes résultats. Code ci-dessous:
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
L’autre chose que j’ai essayée est avec @i au lieu de i. Même erreur. Quelqu'un peut-il voir ce que je fais mal?
Vous ne pouvez pas utiliser WHILE
comme ça; voir: mysql DECLARE WHILE en dehors de la procédure stockée comment?
Vous devez mettre votre code dans une procédure stockée. Exemple:
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
Violon: http://sqlfiddle.com/#!2/a4f92/1
Vous pouvez également générer une liste d'instructions INSERT
à l'aide du langage de programmation de votre choix. pour une création unique, ça devrait aller. À titre d'exemple, voici un Bash one-liner:
for i in {2376921001..2376921099}; do echo "INSERT INTO mytable (code, active, total) VALUES ($i, 1, 1);"; done
Au fait, vous avez fait une faute de frappe dans vos chiffres; 2376921001 a 10 chiffres, 237692200 seulement 9.
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();