ขึ้นอยู่กับจำนวนชุดค่าหรือไม่? ขึ้นอยู่กับจำนวนไบต์ในคำสั่ง INSERT หรือไม่?
ขึ้นอยู่กับจำนวนชุดค่าหรือไม่? ขึ้นอยู่กับจำนวนไบต์ในคำสั่ง INSERT หรือไม่?
คำตอบ:
คุณสามารถแทรกระเบียนจำนวนมากได้โดยใช้ INSERT ... SELECT
รูปแบบหากคุณมีระเบียนเหล่านั้นหรือบางส่วนในตารางอื่น ๆ
แต่ถ้าคุณฮาร์ดโค้ดค่าโดยใช้INSERT ... VALUES
รูปแบบจะมีข้อ จำกัด ว่าคำสั่งของคุณมีขนาดใหญ่ / ยาวแค่ไหน: max_allowed_packetซึ่งจำกัดความยาวของคำสั่ง SQL ที่ไคลเอ็นต์ส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลและจะส่งผลต่อการสืบค้นทุกประเภท และไม่เพียง แต่สำหรับคำสั่ง INSERT
ตามหลักการแล้ว Mysql อนุญาตให้สร้างแถวได้ไม่ จำกัด ในการแทรกครั้งเดียว (พร้อมกัน) แต่เมื่อ a
ไคลเอนต์ MySQL หรือเซิร์ฟเวอร์ mysqld ได้รับแพ็กเก็ตที่มีขนาดใหญ่กว่า max_allowed_packet ไบต์ทำให้แพ็กเก็ตมีข้อผิดพลาดมากเกินไปและปิดการเชื่อมต่อ
หากต้องการดูค่าเริ่มต้นสำหรับตัวแปร max_allowed_packet ให้รันคำสั่งต่อไปนี้ใน MySQL:
show variables like 'max_allowed_packet';
การติดตั้ง MySQL มาตรฐานมีค่าเริ่มต้นคือ 1048576 ไบต์ (1MB) สามารถเพิ่มได้โดยตั้งค่าให้สูงขึ้นสำหรับเซสชันหรือการเชื่อมต่อ
ค่านี้ตั้งค่าเป็น 500MB สำหรับทุกคน (นั่นคือความหมายของ GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
ตรวจสอบการเปลี่ยนแปลงของคุณในเทอร์มินัลใหม่ด้วยการเชื่อมต่อใหม่:
show variables like 'max_allowed_packet';
ตอนนี้ควรใช้งานได้โดยไม่มีข้อผิดพลาดใด ๆ สำหรับการแทรกระเบียนที่ไม่มีที่สิ้นสุด ขอบคุณ
strlen($query_with_questionmarks) < $max_alloweed_packet
หรือไม่?
โดยmax_allowed_packet
ทั่วไปการสืบค้นจะถูก จำกัด
อ้างถึงhttp://forums.mysql.com/read.php?20,161869ก็เกี่ยวข้องกับการกำหนดค่า MySQL ของคุณ: max_allowed_packet
, ,bulk_insert_buffer_size
key_buffer_size
คุณจะถึงขีด จำกัด max_allowed_packet และ
ข้อผิดพลาด: 1390 คำสั่งที่เตรียมไว้มีตัวยึดตำแหน่งมากเกินไป
คุณสามารถใส่ตัวยึดตำแหน่ง 65535 ในหนึ่ง sql ได้ดังนั้นหากคุณมีสองคอลัมน์ในหนึ่งแถวคุณสามารถแทรก 32767 แถวในหนึ่ง sql
การนำเข้า 50K + Records ใน MySQL ให้ข้อผิดพลาดทั่วไป: 1390 คำสั่ง Prepared มีตัวยึดตำแหน่งมากเกินไป
คุณสามารถแทรกแถวได้ไม่ จำกัด ด้วยคำสั่ง INSERT หนึ่งคำสั่ง ตัวอย่างเช่นคุณสามารถเรียกใช้กระบวนงานที่เก็บไว้ซึ่งมีการวนซ้ำเป็นพัน ๆ ครั้งในแต่ละครั้งที่เรียกใช้แบบสอบถาม INSERT
หรือ INSERT ของคุณสามารถทริกเกอร์ทริกเกอร์ซึ่งตัวมันเองดำเนินการแทรก ซึ่งทริกเกอร์อื่น และอื่น ๆ
ไม่ได้ขึ้นอยู่กับจำนวนชุดค่า ไม่ขึ้นอยู่กับจำนวนไบต์
มีขีด จำกัด ว่าวงเล็บของคุณจะซ้อนกันลึกเพียงใดและขีด จำกัด ของระยะเวลาในคำสั่งรวมของคุณ ทั้งสองอย่างนี้อ้างอิงแดกดันบน thedailywtf.com อย่างไรก็ตามทั้งสองวิธีที่ฉันกล่าวถึงข้างต้นสามารถหลีกเลี่ยงข้อ จำกัด เหล่านี้ได้
ฉันเชื่อว่าไม่มีจำนวนแถวที่กำหนดไว้ซึ่งคุณถูก จำกัด ให้แทรกต่อ INSERT แต่โดยทั่วไปอาจมีขนาดสูงสุดบางประเภทสำหรับข้อความค้นหา
ถูก จำกัด โดย max_allowed_packet
คุณสามารถระบุได้โดยใช้:
mysqld --max_allowed_packet=32M
เป็นค่าเริ่มต้น 16M
คุณยังสามารถระบุใน my.cnf ใน / etc / mysql /