Documenti MySQL su Dichiarazioni di controllo del flusso dì:
Documenti su Programmi e visualizzazioni memorizzati dì:
Sintassi dell'istruzione composta
Quindi, sembra che tu possa eseguire un ciclo esplicito solo all'interno di una procedura, una funzione o un trigger memorizzati.
A seconda di ciò che fai nella tua istruzione SQL, potrebbe essere accettabile utilizzare una tabella (o vista) di numeri (Creazione di una "Tabella dei numeri" in mysql , MYSQL:tabella dei numeri sequenziali ).
Se la tua richiesta è un SELECT
ed è OK restituire il risultato del tuo SELECT
10 volte più lungo di un set di risultati (invece di 10 set di risultati separati) puoi fare qualcosa del genere:
SELECT MainQuery.*
FROM
(
SELECT 1 AS Number
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
UNION ALL SELECT 10
) AS Numbers
CROSS JOIN
(
SELECT 'some data' AS Result
) AS MainQuery
Esempio per INSERT
Raccomando di avere una tabella di numeri permanente nel database. È utile in molti casi. Vedi i link sopra come generarlo.
Quindi, se hai una tabella Numbers
con int
colonna Number
con valori da 1 a, diciamo, 100K (come faccio io) e chiave primaria su questa colonna, quindi invece di questo ciclo:
DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
INSERT INTO table_name(col1,col2,col3)
VALUES("val1","val2",count);
SET count = count + 1;
END WHILE;
puoi scrivere:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Funzionerebbe anche quasi 10 volte più velocemente.