Dipende dal numero di insiemi di valori? Dipende dal numero di byte nell'istruzione INSERT?
Risposte:
È possibile inserire un numero infinito di record utilizzando INSERT ... SELECT
pattern, a condizione di disporre di tali record o di una parte di essi in altre tabelle.
Ma se stai codificando i valori usando INSERT ... VALUES
pattern, allora c'è un limite su quanto è grande / lunga la tua istruzione: max_allowed_packet che limita la lunghezza delle istruzioni SQL inviate dal client al server database e influisce su qualsiasi tipo di query e non solo per l'istruzione INSERT.
Idealmente, Mysql consente la creazione di un numero infinito di righe in un singolo inserimento (contemporaneamente) ma quando un file
Il client MySQL o il server mysqld riceve un pacchetto più grande di max_allowed_packet byte, emette un errore di pacchetto troppo grande e chiude la connessione.
Per visualizzare qual è il valore predefinito per la variabile max_allowed_packet, eseguire il seguente comando in MySQL:
show variables like 'max_allowed_packet';
L'installazione standard di MySQL ha un valore predefinito di 1048576 byte (1 MB). Questo può essere aumentato impostandolo su un valore più alto per una sessione o una connessione.
Questo imposta il valore a 500 MB per tutti (questo è ciò che significa GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
controlla la modifica nel nuovo terminale con una nuova connessione:
show variables like 'max_allowed_packet';
Ora dovrebbe funzionare senza errori per l'inserimento di record infiniti. Grazie
strlen($query_with_questionmarks) < $max_alloweed_packet
?
La query è limitata max_allowed_packet
in generale.
si riferiscono a http://forums.mysql.com/read.php?20,161869 , è in relazione con la configurazione del mysql: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
È possibile inserire un numero infinito di righe con un'istruzione INSERT. Ad esempio, è possibile eseguire una stored procedure che dispone di un ciclo eseguito migliaia di volte, ogni volta che esegue una query INSERT.
Oppure il tuo INSERT potrebbe far scattare un trigger che esegue esso stesso un INSERT. Che fa scattare un altro trigger. E così via.
No, non dipende dal numero di insiemi di valori. Né dipende dal numero di byte.
C'è un limite a quanto profondamente possono essere annidate le parentesi e un limite alla lunghezza della tua dichiarazione totale. Entrambi sono citati, ironicamente, su thedailywtf.com. Tuttavia, entrambi i mezzi che ho menzionato sopra aggirano questi limiti.
Raggiungerai il limite max_allowed_packet e
errore: 1390 L'istruzione preparata contiene troppi segnaposto.
Puoi mettere 65535 segnaposto in un sql, quindi se hai due colonne in una riga, puoi inserire 32767 righe in un sql.