Değer kümelerinin sayısına bağlı mı? INSERT ifadesindeki bayt sayısına bağlı mı?
Yanıtlar:
INSERT ... SELECT
Diğer tablolarda bu kayıtlara veya bunların bir kısmına sahip olmanız koşuluyla, desen kullanarak sonsuz sayıda kayıt ekleyebilirsiniz .
Ancak INSERT ... VALUES
, desen kullanarak değerleri sabit kodluyorsanız , ifadenizin ne kadar büyük / uzun olduğuna dair bir sınır vardır: max_allowed_packet, bu da istemci tarafından veritabanı sunucusuna gönderilen SQL ifadelerinin uzunluğunu sınırlar ve her tür sorguyu etkiler. ve sadece INSERT ifadesi için değil.
İdeal olarak, Mysql, tek eklemede (bir kerede) sonsuz sayıda satır oluşturmaya izin verir, ancak
MySQL istemcisi veya mysqld sunucusu max_allowed_packet bayttan daha büyük bir paket alır, çok büyük bir Paket hatası verir ve bağlantıyı kapatır.
Max_allowed_packet değişkeni için varsayılan değerin ne olduğunu görmek için MySQL'de aşağıdaki komutu yürütün:
show variables like 'max_allowed_packet';
Standart MySQL kurulumunun varsayılan değeri 1048576 bayttır (1MB). Bu, bir oturum veya bağlantı için daha yüksek bir değere ayarlanarak artırılabilir.
Bu, değeri herkes için 500 MB olarak ayarlar (GLOBAL'ın anlamı budur):
SET GLOBAL max_allowed_packet=524288000;
Yeni bağlantı ile yeni terminaldeki değişikliğinizi kontrol edin:
show variables like 'max_allowed_packet';
Sonsuz kayıt eklemek için artık hatasız çalışması gerekir. Teşekkürler
strlen($query_with_questionmarks) < $max_alloweed_packet
?
Sorgu max_allowed_packet
genel olarak sınırlıdır .
bakın http://forums.mysql.com/read.php?20,161869 , bu mysql yapılandırmasına ile alakalı: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Bir INSERT ifadesiyle sonsuz sayıda satır ekleyebilirsiniz. Örneğin, her seferinde bir INSERT sorgusu çalıştıran bir döngüye sahip olan bir saklı yordamı çalıştırabilirsiniz.
Veya INSERT'iniz, kendisi bir INSERT gerçekleştiren bir tetikleyiciyi açabilir. Hangi başka bir tetikleyiciyi tetikler. Ve bunun gibi.
Hayır, değer kümelerinin sayısına bağlı değildir. Bayt sayısına da bağlı değildir.
Parantezlerinizin ne kadar derinlemesine yerleştirilmiş olabileceğinin bir sınırı ve toplam ifadenizin ne kadar uzun olduğunun bir sınırı vardır. İkisine de ironik bir şekilde thedailywtf.com'da atıfta bulunulmaktadır. Ancak yukarıda bahsettiğim her iki yöntem de bu sınırları aşıyor.
Max_allowed_packet sınırına ulaşacaksınız ve
hata: 1390 Hazırlanan ifade çok fazla yer tutucu içeriyor.
Bir sql'ye 65535 adet yer tutucu koyabilirsiniz. Yani bir satırda iki sütununuz varsa, bir sql'ye 32767 satır ekleyebilirsiniz.