Cela dépend-il du nombre de jeux de valeurs? Cela dépend-il du nombre d'octets dans l'instruction INSERT?
Vous pouvez insérer un nombre infini d'enregistrements à l'aide de INSERT ... SELECT
pattern, à condition que vous ayez ces enregistrements, ou une partie de ceux-ci, dans d'autres tables.
Mais si vous codez en dur les valeurs en utilisant INSERT ... VALUES
pattern, il existe une limite à 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 tous types de requêtes. non seulement pour l'instruction INSERT.
Dans l’idéal, Mysql autorise la création d’un nombre infini de lignes dans une seule insertion (en une fois), mais lorsqu’un
Le client MySQL ou le serveur mysqld reçoit un paquet plus grand que max_allowed_packet octets, il génère 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 1048 576 octets (1 Mo). Cela peut être augmenté en lui attribuant une valeur plus élevée pour une session ou une connexion.
Ceci définit la valeur à 500 Mo pour tout le monde (c'est ce que GLOBAL signifie):
SET GLOBAL max_allowed_packet=524288000;
vérifiez votre changement de nouveau terminal avec une nouvelle connexion:
show variables like 'max_allowed_packet';
Maintenant, cela devrait fonctionner sans erreur pour les enregistrements infinis. Merci
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 seule instruction INSERT. Par exemple, vous pouvez exécuter une procédure stockée comportant une boucle exécutée mille fois, exécutant à chaque fois une requête INSERT.
Ou bien votre INSERT peut 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 existe une limite à la profondeur d'imbrication de vos parenthèses et à la longueur de votre déclaration totale. Ironiquement, ces deux éléments sont référencés 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
error: 1390 L'instruction préparée contient trop d'espaces réservés.
Vous pouvez placer 65535 espaces réservés dans un sql.Ainsi, si vous avez deux colonnes dans une ligne, vous pouvez insérer 32767 lignes dans un même sql.
Il est limité par max_allowed_packet.
Vous pouvez spécifier en utilisant: mysqld --max_allowed_packet=32M
Il est par défaut 16M.
Vous pouvez également spécifier dans my.cnf dans/etc/mysql /
Je crois qu'il n'y a pas de nombre défini de lignes que vous êtes limité à insérer par INSERT, mais il peut y avoir une sorte de taille maximale pour les requêtes en général.