2010-08-21 15 views

Odpowiedz

0

Uważam, że nie ma zdefiniowanej liczby rzędów, które można wstawić na INSERT, ale ogólnie może być jakiś maksymalny rozmiar dla zapytań.

4

Możesz wstawić nieskończoną liczbę wierszy za pomocą jednej instrukcji INSERT. Na przykład można wykonać procedurę składowaną, która ma pętlę wykonaną tysiąc razy, za każdym razem uruchamiając zapytanie INSERT.

Lub INSERT może wyzwolić wyzwalacz, który sam wykonuje INSERT. Który uruchamia inny spust. I tak dalej.

Nie, to nie zależy od liczby zestawów wartości. Nie zależy również od liczby bajtów.

Istnieje granica głębokości zagnieżdżenia w nawiasie oraz limit czasu trwania całego wyciągu. Oba są przywoływane, ironicznie, na thedailywtf.com. Jednak oba środki, o których wspomniałem powyżej, pokonują te ograniczenia.

+0

Twoje przykłady są do uruchamiania wielu wstawić, a nie pokazuje o wstawianie wielu wierszy w jeden ** ** INSERT .. – Lukman

+0

@Lukman: Jedno zapytanie INSERT może spowodować wiele przekładek uderzających bazę . To tylko kwestia tego, kto się liczy. – Borealid

+2

prawda, ale twój pierwszy przykład pokazuje o uruchomieniu zapytania w pętli z każdą pętlą z jedną instrukcją INSERT i nie mówi nic o tej instrukcji INSERT wstawiającej wiele wierszy. to tylko kwestia nacisku. – Lukman

74

Można wstawiać nieskończenie dużą liczbę rekordów, stosując wzór INSERT ... SELECT, pod warunkiem, że mają one te lub inne części w innych tabelach.

Ale jeśli ciężko koduje się wartości przy użyciu wzoru INSERT ... VALUES, istnieje ograniczenie co do długości/długości wyciągu: max_allowed_packet, co ogranicza długość instrukcji SQL wysyłanych przez klienta do serwera bazy danych, a także wpływa na wszystkie typy zapytań, a nie tylko dla instrukcji INSERT.

19

Zapytanie jest ogólnie ograniczone przez max_allowed_packet.

1

Jest ograniczona przez max_allowed_packet.
Można określić, używając: mysqld --max_allowed_packet=32M Domyślnie jest to 16M.
Można również określić w my.cnf w/etc/mysql/

20

Idealnie, MySQL umożliwiają nieskończoną liczbę tworzenia wierszy w pojedynczej wkładki (na raz), ale gdy

klienta MySQL lub serwer mysqld otrzyma pakiet większy niż max_allowed_packet bajtów, wydaje paczkę zbyt duży błąd i zamyka połączenie.

Aby zobaczyć, co jest wartością domyślną dla 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 (1MB). Można to zwiększyć, ustawiając go na wyższą wartość dla sesji lub połączenia.

ten ustawia wartość do 500 MB dla każdego (to właśnie oznacza GLOBAL):

SET GLOBAL max_allowed_packet=524288000;

sprawdzić zmiany w nowym terminalu z nowego połączenia:

show variables like 'max_allowed_packet';

Teraz powinno działa bez żadnego błędu dla nieskończonej wstawki rekordów. Dzięki

+4

500 MB nie jest nieskończone. Jest znacznie większy niż wartość domyślna, ale wciąż nie jest nieskończony. – Carlos2W

Powiązane problemy