存儲過程:數據庫里的 "定制工具箱"
存儲過程就像一個裝滿工具的箱子,你需要什么功能,就調用對應的工具。它是用 SQL 語句寫好的一段程序,存儲在數據庫里,隨時可以調用。
創建存儲過程 就像在工具箱里放新工具。比如,我們創建一個計算學生總分的存儲過程:
delimiter //
create procedure p_calAvg()
BEGINselect name, chinese + math + english as total from exam;
END //
delimiter ;
delimiter //
是在告訴數據庫,我們暫時不用普通的分號;
結束語句,而是用//
,這樣就能完整地創建存儲過程啦!創建完成后別忘了用delimiter ;
把分號變回來哦。
調用存儲過程 就像從工具箱里拿出工具用:
call p_calAvg();
存儲過程能減少網絡傳輸,提高性能,就像把常用工具放在手邊,隨用隨取。
變量:數據庫里的 "小紙條"
在 MySQL 里,變量就像小紙條,把數據暫時記在上面,之后再用。
系統變量:數據庫自帶的 "便簽"
系統變量是數據庫自己準備好的便簽,分為全局(所有用戶都能看)和會話(只給自己看)兩種:
查看系統變量:
SHOW VARIABLES LIKE 'character_set_server';
設置系統變量:
SET GLOBAL character_set_server = 'utf8mb4';
用戶自定義變量:你的專屬 "記事本"
你可以自己創建變量來保存臨時數據:
SET @var_name = 123; -- 賦值
SELECT @var_name; -- 使用
局部變量:存儲過程里的 "便簽條"
在存儲過程里,變量只能在過程里用,像這樣:
DECLARE var_name INT DEFAULT 0;
變量能幫你保存中間結果,方便后續操作,就像做數學題時先把步驟記下來,最后再算出答案。
SQL 編程:讓數據庫學會 "思考"
SQL 也能像編程一樣,根據條件做不同操作,甚至循環執行,就像給數據庫裝上了 "聰明大腦"。
條件語句:數據庫的 "選擇題"
IF 語句 就像給數據庫出選擇題:
IF score >= 90 THENSET grade = 'A';
ELSEIF score >= 60 THENSET grade = 'B';
ELSESET grade = 'C';
END IF;
CASE 語句 像更靈活的選擇題,有兩種寫法:
簡單 CASE:
CASE var_name WHEN 1 THEN 'A' WHEN 2 THEN 'B' ELSE 'C' END
搜索結果 CASE:
CASE WHEN score >= 90 THEN 'A' WHEN score >= 60 THEN 'B' ELSE 'C' END
循環語句:數據庫的 "重復播放"
WHILE 循環 像設置個條件,滿足就一直執行:
WHILE i <= 10 DOSET sum = sum + i;SET i = i + 1;
END WHILE;
REPEAT 循環 則是先執行,再判斷是否繼續:
SET i = 0;
REPEATSET sum = sum + i;SET i = i + 1;
UNTIL i > 10
END REPEAT;
LOOP 循環 像個簡單的重復播放,配合 LEAVE(跳出循環)和 ITERATE(繼續循環):
outer_loop: LOOPINNER LOOP: LOOPIF i > 5 THENLEAVE outer_loop;END IF;SET i = i + 1;ITERATE INNER LOOP;END LOOP;
END LOOP;
游標:數據的 "快遞員"
游標能把查詢結果一行行地送過來,方便你逐個處理:
聲明游標:
DECLARE cursor_name CURSOR FOR select...
打開游標:
OPEN cursor_name;
獲取數據:
FETCH cursor_name INTO var_name1, var_name2;
關閉游標:
CLOSE cursor_name;
條件處理程序:數據庫的 "安全員"
條件處理程序能幫數據庫應對各種異常情況,就像給它配了個安全員:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSET error_count = error_count + 1;
存儲函數:數據庫的 "小助手"
存儲函數就像數據庫的小助手,能返回計算結果:
CREATE FUNCTION Fun(n INT) RETURNS INT DETERMINISTIC
BEGINDECLARE total INT DEFAULT 0;WHILE n > 0 DOSET total = total + n;SET n = n - 1;END WHILE;RETURN total;
END
調用時直接用 SELECT Fun(10);
就能拿到結果啦!