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