Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya Melintasi Baris dalam Jadual MySQL?
Walaupun MySQL tidak menyokong sintaks gelung baris demi baris secara asli seperti "untuk setiap rekod dalam A," ia menyediakan mekanisme untuk lelaran melalui baris jadual secara sistematik.
Satu pendekatan ialah mencipta prosedur yang beroperasi pada baris individu. Prosedur ialah blok kod yang ditentukan pengguna yang boleh dilaksanakan seperti pertanyaan. Berikut ialah prosedur MySQL yang melingkari baris dalam jadual A:
DROP PROCEDURE IF EXISTS ROWPERROW; DELIMITER ;; CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) FROM A INTO n; SET i=0; WHILE i<n DO INSERT INTO B(ID, VAL) SELECT (ID, VAL) FROM A LIMIT i,1; SET i = i + 1; END WHILE; End; ;; DELIMITER ; CALL ROWPERROW();
Prosedur ini mengira baris dalam jadual A, kemudian melelang melalui setiap baris dan memasukkan datanya ke dalam jadual B.
Teknik lain ialah menggunakan kursor, yang membolehkan anda mendapatkan semula data daripada jadual baris demi baris. Kursor memberikan lebih kawalan ke atas lintasan baris daripada prosedur tetapi juga boleh menjadi lebih bertele-tele. Pertimbangkan contoh kursor MySQL berikut:
DROP PROCEDURE IF EXISTS cursor_ROWPERROW; DELIMITER ;; CREATE PROCEDURE cursor_ROWPERROW() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE cursor_i CURSOR FOR SELECT ID,VAL FROM A; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID, cursor_VAL; IF done THEN LEAVE read_loop; END IF; INSERT INTO B(ID, VAL) VALUES(cursor_ID, cursor_VAL); END LOOP; CLOSE cursor_i; END; ;; DELIMITER ; CALL cursor_ROWPERROW();
Di sini, kursor dicipta untuk jadual A dan dibuka. Gelung WHILE mengambil baris daripada kursor dan memprosesnya sehingga tiada lagi baris untuk diproses.
Atas ialah kandungan terperinci Bagaimanakah saya Melintasi Baris dalam Jadual MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!