Nó có phụ thuộc vào số bộ giá trị không? Nó có phụ thuộc vào số byte trong câu lệnh INSERT không?
Câu trả lời:
Bạn có thể chèn vô số bản ghi bằng cách sử dụng INSERT ... SELECT
mẫu, miễn là bạn có các bản ghi đó hoặc một phần của, trong các bảng khác.
Nhưng nếu bạn đang mã hóa cứng các giá trị bằng cách sử dụng INSERT ... VALUES
mẫu, thì sẽ có giới hạn về độ lớn / dài của câu lệnh của bạn: max_allowed_packet giới hạn độ dài của câu lệnh SQL do máy khách gửi đến máy chủ cơ sở dữ liệu và nó ảnh hưởng đến bất kỳ loại truy vấn nào và không chỉ cho câu lệnh INSERT.
Lý tưởng nhất, Mysql cho phép tạo vô số hàng trong một lần chèn (cùng một lúc) nhưng khi
Máy khách MySQL hoặc máy chủ mysqld nhận được một gói lớn hơn max_allowed_packet byte, nó phát ra lỗi Gói quá lớn và đóng kết nối.
Để xem giá trị mặc định cho biến max_allowed_packet là gì, hãy thực hiện lệnh sau trong MySQL:
show variables like 'max_allowed_packet';
Cài đặt MySQL tiêu chuẩn có giá trị mặc định là 1048576 byte (1MB). Điều này có thể được tăng lên bằng cách đặt nó thành giá trị cao hơn cho một phiên hoặc kết nối.
Điều này đặt giá trị thành 500MB cho mọi người (đó là ý nghĩa của GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
kiểm tra sự thay đổi của bạn trong thiết bị đầu cuối mới với kết nối mới:
show variables like 'max_allowed_packet';
Bây giờ nó sẽ hoạt động mà không có bất kỳ lỗi nào cho chèn bản ghi vô hạn. Cảm ơn
strlen($query_with_questionmarks) < $max_alloweed_packet
?
max_allowed_packet
Nói chung, truy vấn bị giới hạn .
tham khảo http://forums.mysql.com/read.php?20,161869 , nó có liên quan với cấu hình mysql của bạn: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Bạn có thể chèn vô số hàng bằng một câu lệnh INSERT. Ví dụ, bạn có thể thực thi một thủ tục được lưu trữ có một vòng lặp được thực thi hàng nghìn lần, mỗi lần chạy một truy vấn CHÈN.
Hoặc INSERT của bạn có thể ngắt một trình kích hoạt mà chính nó thực hiện một INSERT. Chuyến đi nào khác kích hoạt. Và như thế.
Không, nó không phụ thuộc vào số lượng bộ giá trị. Nó cũng không phụ thuộc vào số lượng byte.
Có giới hạn về mức độ lồng sâu trong dấu ngoặc đơn của bạn và giới hạn về tổng thời lượng câu lệnh của bạn. Trớ trêu thay, cả hai đều được tham chiếu trên thedailywtf.com. Tuy nhiên, cả hai phương tiện tôi đề cập ở trên đều vượt qua những giới hạn này.
Bạn sẽ đạt đến giới hạn max_allowed_packet và
error: 1390 Câu lệnh soạn sẵn chứa quá nhiều chỗ dành sẵn.
Bạn có thể đặt 65535 chỗ dành sẵn trong một sql Vì vậy, nếu bạn có hai cột trong một hàng, bạn có thể chèn 32767 hàng trong một sql.
Nhập 50K + Bản ghi trong MySQL Đưa ra Lỗi chung: 1390 Câu lệnh soạn sẵn chứa quá nhiều chỗ dành sẵn