MySQL中的循環(huán)(LOOP)結構可以讓我們在查詢時,對每一個結果進行循環(huán)處理。
在MySQL中,循環(huán)分為兩種:
1. 標準循環(huán)(LOOP) 2. 游標循環(huán)(CURSOR)
接下來分別介紹標準循環(huán)和游標循環(huán):
1. 標準循環(huán)
DELIMITER $$ CREATE PROCEDURE proc_standard_loop() BEGIN DECLARE i INT DEFAULT 1; WHILE i< 5 DO SELECT CONCAT('這是第',i,'次循環(huán)') AS result; SET i = i + 1; END WHILE; END $$ DELIMITER ; CALL proc_standard_loop();
通過以上代碼,我們可以看到:
1. 使用 DELIMITER $$ 定義新的執(zhí)行標識符,避免語法錯誤。 2. 創(chuàng)建一個存儲過程,在 BEGIN 和 END 之間編寫循環(huán)邏輯。 3. 聲明一個變量 i,用于計數(shù)。 4. while 循環(huán)語句在 i 小于 5 時執(zhí)行。 5. 每次循環(huán)都會執(zhí)行一次 SELECT CONCAT('這是第',i,'次循環(huán)') AS result;,輸出“這是第 i 次循環(huán)”。 6. 把 i 的值加 1,循環(huán)重新開始。
2. 游標循環(huán)
DELIMITER $$ CREATE PROCEDURE proc_cursor_loop() BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE name VARCHAR(20); DECLARE cur CURSOR FOR SELECT name FROM student; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; testloop: LOOP FETCH cur INTO name; IF done THEN LEAVE testloop; END IF; SELECT CONCAT('學生姓名:', name) AS result; END LOOP; CLOSE cur; END $$ DELIMITER ; CALL proc_cursor_loop();
通過以上代碼,我們可以看到:
1. 創(chuàng)建一個游標 cur,查詢所有學生的姓名。 2. 使用 CONTINUE HANDLER 設置異常處理程序,如果在 FETCH 中找不到記錄,則將 done 設為 TRUE,結束循環(huán)。 3. 使用 OPEN 打開游標。 4. 使用 testloop 標識循環(huán)。 5. 使用 FETCH 獲取當前游標的值,存入變量 name 中。 6. 判斷 done 是否為 TRUE,如果是,結束循環(huán)。 7. 輸出當前學生姓名。 8. 回到 testloop,繼續(xù)循環(huán)。 9. 使用 CLOSE 關閉游標。
通過以上的例子我們可以了解到,在使用標準循環(huán)和游標循環(huán)時,需要注意以下幾點:
1. 在使用 DELIMITER 時,新的執(zhí)行標識符必須與 END 的分號分隔開。 2. 在創(chuàng)建循環(huán)語句前,需要使用 DECLARE 聲明變量。 3. 在使用 WHILE 循環(huán)時,需要先定義變量的初始值。 4. 在使用游標循環(huán)時,需要先定義游標,并使用 CONTINUE HANDLER 如果在 FETCH 中找不到記錄的異常處理程序。 5. 在使用游標循環(huán)時,需要使用 OPEN 打開游標,使用 CLOSE 關閉游標。