Czy zależy to od liczby zestawów wartości? Czy zależy to od liczby bajtów w instrukcji INSERT?
źródło
Czy zależy to od liczby zestawów wartości? Czy zależy to od liczby bajtów w instrukcji INSERT?
Możesz wstawiać nieskończenie dużą liczbę rekordów za pomocą INSERT ... SELECT
wzorca, pod warunkiem, że masz te rekordy lub ich część w innych tabelach.
Ale jeśli na stałe kodujesz wartości za pomocą INSERT ... VALUES
wzorca, istnieje ograniczenie dotyczące wielkości / długości instrukcji: max_allowed_packet, które ogranicza długość instrukcji SQL wysyłanych przez klienta do serwera bazy danych i ma wpływ na wszystkie typy zapytań i nie tylko dla instrukcji INSERT.
Idealnie, MySQL pozwala na tworzenie nieskończonej liczby wierszy w jednym wstawieniu (na raz), ale gdy plik
Klient MySQL lub serwer mysqld otrzymuje pakiet większy niż max_allowed_packet bajtów, generuje błąd Packet too large i zamyka połączenie.
Aby zobaczyć, jaka jest domyślna wartość zmiennej max_allowed_packet, wykonaj następujące polecenie w MySQL:
show variables like 'max_allowed_packet';
Standardowa instalacja MySQL ma domyślną wartość 1048576 bajtów (1 MB). Można to zwiększyć, ustawiając wyższą wartość dla sesji lub połączenia.
To ustawia wartość na 500 MB dla wszystkich (to właśnie oznacza GLOBALNY):
SET GLOBAL max_allowed_packet=524288000;
sprawdź zmianę w nowym terminalu z nowym połączeniem:
show variables like 'max_allowed_packet';
Teraz powinno działać bez żadnego błędu dla nieskończonego wstawiania rekordów. Dzięki
strlen($query_with_questionmarks) < $max_alloweed_packet
?Zapytanie jest
max_allowed_packet
ogólnie ograniczone .źródło
patrz http://forums.mysql.com/read.php?20,161869 , jest to związane z konfiguracją Twojego MySQL:
max_allowed_packet
,bulk_insert_buffer_size
,key_buffer_size
.źródło
Za pomocą jednej instrukcji INSERT można wstawić nieskończoną liczbę wierszy. Na przykład można wykonać procedurę składowaną, w której pętla jest wykonywana tysiące razy, za każdym razem, gdy jest uruchamiane zapytanie INSERT.
Lub twój INSERT może wyzwolić wyzwalacz, który sam wykonuje INSERT. Który uruchamia kolejny wyzwalacz. I tak dalej.
Nie, to nie zależy od liczby zestawów wartości. Nie zależy też od liczby bajtów.
Istnieje ograniczenie co do tego, jak głęboko mogą być zagnieżdżone nawiasy i jak długo trwa całe zestawienie. Jak na ironię, do obu tych odniesień znajduje się strona thedailywtf.com. Jednak oba wymienione powyżej środki pozwalają obejść te ograniczenia.
źródło
Osiągniesz limit max_allowed_packet i
błąd: 1390 Przygotowana instrukcja zawiera zbyt wiele symboli zastępczych.
Możesz umieścić 65535 symboli zastępczych w jednym sql, więc jeśli masz dwie kolumny w jednym wierszu, możesz wstawić 32767 wierszy w jednym sql.
Importowanie ponad 50 000 rekordów do MySQL powoduje błąd ogólny: 1390 Przygotowana instrukcja zawiera zbyt wiele symboli zastępczych
źródło
Wydaje mi się, że nie ma zdefiniowanej liczby wierszy, które można wstawić na WSTAWIENIE, ale ogólnie może istnieć jakiś maksymalny rozmiar zapytań.
źródło
Jest ograniczony przez max_allowed_packet.
Możesz określić używając:
mysqld --max_allowed_packet=32M
Domyślnie jest to 16M.Możesz również określić w my.cnf w / etc / mysql /
źródło