Cela dépend-il du nombre d'ensembles de valeurs? Cela dépend-il du nombre d'octets dans l'instruction INSERT?
Réponses:
Vous pouvez insérer un nombre infiniment grand d'enregistrements à l'aide d'un INSERT ... SELECT
modèle, à condition que vous ayez ces enregistrements, ou une partie de, dans d'autres tables.
Mais si vous codez en dur les valeurs à l'aide de INSERT ... VALUES
pattern, il y a une limite sur la taille / la longueur de votre instruction: max_allowed_packet qui limite la longueur des instructions SQL envoyées par le client au serveur de base de données et affecte tous les types de requêtes et pas seulement pour l'instruction INSERT.
Idéalement, Mysql permet la création d'un nombre infini de lignes en un seul insert (à la fois) mais quand un
Le client MySQL ou le serveur mysqld reçoit un paquet plus grand que max_allowed_packet octets, il émet une erreur Packet too large et ferme la connexion.
Pour afficher la valeur par défaut de la variable max_allowed_packet, exécutez la commande suivante dans MySQL:
show variables like 'max_allowed_packet';
L'installation standard de MySQL a une valeur par défaut de 1048576 octets (1 Mo). Cela peut être augmenté en le définissant sur une valeur plus élevée pour une session ou une connexion.
Cela définit la valeur à 500 Mo pour tout le monde (c'est ce que signifie GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
vérifiez votre changement dans un nouveau terminal avec une nouvelle connexion:
show variables like 'max_allowed_packet';
Maintenant, cela devrait fonctionner sans aucune erreur pour l'insertion d'enregistrements infinis. Merci
strlen($query_with_questionmarks) < $max_alloweed_packet
?
La requête est limitée par max_allowed_packet
en général.
reportez - vous à http://forums.mysql.com/read.php?20,161869 , il est lié à la configuration de votre mysql: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Vous pouvez insérer un nombre infini de lignes avec une instruction INSERT. Par exemple, vous pouvez exécuter une procédure stockée dont une boucle est exécutée mille fois, chaque fois en exécutant une requête INSERT.
Ou votre INSERT pourrait déclencher un déclencheur qui effectue lui-même un INSERT. Ce qui déclenche un autre déclencheur. Etc.
Non, cela ne dépend pas du nombre de jeux de valeurs. Cela ne dépend pas non plus du nombre d'octets.
Il y a une limite à la profondeur d'imbrication de vos parenthèses et une limite à la longueur de votre déclaration totale. Les deux sont référencés, ironiquement, sur thedailywtf.com. Cependant, les deux moyens que j'ai mentionnés ci-dessus contournent ces limites.
Vous atteindrez la limite max_allowed_packet et
erreur: 1390 L'instruction préparée contient trop d'espaces réservés.
Vous pouvez mettre 65535 espaces réservés dans un sql.Si vous avez deux colonnes dans une ligne, vous pouvez insérer 32767 lignes dans un sql.