Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ฉันจะวนซ้ำทุกแถวของตารางใน MySQL ได้อย่างไร


หากต้องการวนซ้ำทุกแถวของตาราง ให้ใช้กระบวนงานที่เก็บไว้ใน MySQL ไวยากรณ์มีดังนี้ −

ตัวคั่น //CREATE PROCEDURE yourProcedureName()BEGIN DECLARE anyVariableName1 INT DEFAULT 0;DECLARE anyVariableName2 INT DEFAULT 0;SELECT COUNT(*) FROM yourTableName1 INTO anyVariableName1;SET anyVariableName2 =0;WHILE yourVariableName2 INTO ของคุณ ..N) เลือก (yourColumnName1,...N)FROM yourTableName1 LIMIT anyVariableName2,1; ตั้งค่า anyVariableName2 =anyVariableName2+1;END WHILE;End;//

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตารางสองตาราง กล่าวคือ ตารางหนึ่งมีระเบียน และตารางที่สองจะมีระเบียนจากลูปโดยใช้ขั้นตอนการจัดเก็บ

ต่อไปนี้เป็นแบบสอบถามเพื่อสร้างตารางแรก -

mysql> สร้างตาราง AllRows -> ( -> Id int, -> Name varchar(100) -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.46 วินาที)

แทรกบางระเบียนในตารางแรกโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −

mysql> แทรกลงในค่า AllRows (1,'John'); Query OK, 1 แถวได้รับผลกระทบ (0.12 วินาที)mysql> แทรกลงในค่า AllRows (100,'Carol'); Query OK, 1 แถวได้รับผลกระทบ (0.13 วินาที )mysql> แทรกลงในค่า AllRows (300, 'Sam'); Query OK, 1 แถวได้รับผลกระทบ (0.15 วินาที)mysql> แทรกลงในค่า AllRows (400,'Mike'); Query OK, 1 แถวได้รับผลกระทบ (0.20 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

mysql> เลือก *จาก AllRows;

ผลลัพธ์

<ก่อนหน้า>+------+-------+| รหัส | ชื่อ |+------+-------+| 1 | จอห์น || 100 | แครอล || 300 | แซม || 400 | ไมค์ | +------+-------+4 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อสร้างตารางที่สอง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> สร้างตาราง SecondTableRows -> ( -> StudentId int, -> StudentName varchar(100) -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.54 วินาที)

ตอนนี้คุณสามารถวนซ้ำแถวทั้งหมดของตารางโดยใช้กระบวนงานที่เก็บไว้ ขั้นตอนการจัดเก็บมีดังนี้ -

mysql> ตัวคั่น //mysql> CREATE PROCEDURE Sp_AllRowsOfATable() -> BEGIN -> DECLARE LastRows INT DEFAULT 0; -> ประกาศ startRows INT DEFAULT 0; -> เลือก COUNT(*) จาก AllRows เป็น LastRows; -> SET startRows=0; -> ในขณะที่ startRows  INSERT INTO SecondTableRows(StudentId) SELECT (Id) จาก AllRows LIMITstartRows ,1; -> SET startRows=startRows+1; -> สิ้นสุดในขณะที่; -> สิ้นสุด; -> //แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.22 วินาที)mysql> ตัวคั่น;

เรียกกระบวนงานที่เก็บไว้โดยใช้คำสั่ง CALL ไวยากรณ์มีดังนี้ −

CALL yourStoredProcedureName;

เรียกกระบวนงานที่เก็บไว้ด้านบนเพื่อวนซ้ำทุกแถวของตารางแรก แบบสอบถามมีดังนี้ −

mysql> เรียก Sp_AllRowsOfATable(); สืบค้นตกลง ได้รับผลกระทบ 1 แถว (0.61 วินาที)

หลังจากเรียกกระบวนงานที่เก็บไว้ให้เราตรวจสอบสิ่งที่เกิดขึ้นกับตารางที่สอง แบบสอบถามมีดังนี้ −

mysql> เลือก StudentId จาก SecondTableRows;

ผลลัพธ์

<ก่อนหน้า>+-----------+| รหัสนักศึกษา |+-----------+| 1 || 100 || 300 || 400 |+-----------+4 แถวในชุด (0.00 วินาที)