MySQL基礎筆記(7) - 函式&其它雜項
阿新 • • 發佈:2021-10-20
本文為MySQL基礎入門相關筆記,同時參考了尚矽谷的BV1xW411u7ax網課和《MySQL必知必會》兩者,主要用於個人記錄與分享,如有錯誤歡迎留言指出
函式&本地化
目錄1. 函式
1.1 基本函式
定義:與儲存過程類似,函式是一組預先編譯好的SQL語句的集合,可以理解成批處理語句。但是儲存過程可以有0個或多個返回,適合做批量插入,批量更新。函式有且僅有1個返回,適合做處理資料後返回一個結果。
語法:CREATE FUNCTION [函式名]([引數名] [引數型別]) RETURNS [返回型別] BEGIN [函式體] END [結束標記]
#1.建立函式 DELIMITER $ CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE BEGIN SET @sal=0;#定義使用者變數 SELECT salary INTO @sal #賦值 FROM employees WHERE last_name = empName; RETURN @sal; END $ #函式體中必須要有return語句 #若函式體中僅有一句話,則可以省略begin end #2.呼叫語法 #SELECT 函式名(引數名 引數型別) SELECT myf2('k_ing');
1.2 流程控制函式
1.2.1 分支函式
-
case結構:case結構的使用和java中的多重if和switch類似,但是在sql中,case結構有兩種使用方法:一是作為獨立的語句出現,二是作為表示式出現,兩者在書寫格式上略有不同
#1.作為獨立語句出現(必須要在Begin end中) BEGIN case [表示式] when [值1/條件1] then [語句1]; when [值2/條件2] then [語句2]; [...] else [語句n]; end case; END #2.作為表示式出現(可以在任何地方) BEGIN case [表示式] when [值1] then [值1]; when [值2] then [值2]; [...] else [值n]; end; END
-
if結構:類似於java中的if-else結構,實現多重分支
BEGIN if [條件1] then [語句1]; elseif [條件2] then [語句2]; [...] else [語句n]; end if; END
1.2.2 迴圈函式
-
while結構
#1.基本while結構 #批量插入,根據次數插入到admin表中多條記錄 DELIMITER $ CREATE PROCEDURE pro_while1(IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1; WHILE i<=insertCount DO INSERT INTO admin(username,`password`) VALUES('Rose'+i,'666'); END WHILE; END $ CALL pro_while(100)$ #2.新增leave語句 #批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止 DELIMITER $ CREATE PROCEDURE pro_while1(IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1; a:WHILE i<=insertCount DO INSERT INTO admin(username,`password`) VALUES('Rose'+i,'666'); IF i>=20 THEN LEAVE a; #類似於break語句,達成條件後跳出a標籤的while END IF; SET i=i+1; END WHILE a; END $ CALL pro_while(100)$ #除了leave之外,還有iterate語句,使用方法和java中的continue類似
-
loop結構
#2.loop [標籤]:loop [迴圈體]; end loop [標籤];
-
repeat結構
#3.repeat [標籤]:repeat [迴圈體]; until [結束迴圈的條件] end repeat [標籤];
2. 本地化和全球化
有時Mysql需要處理不同字符集和語言,以下是一些基礎概念:
- 字符集:字母和符號的集合
- 編碼:某個字符集成員的內部表示
- 校對:規定字元如何比較的指令
#檢視支援的字符集的完整列表
SHOW CHARACTER SET;
#檢視支援的校對的完整列表
SHOW COLLATION;
#檢視預設的字符集和校對
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
#例項:建立一個表並指定一個字符集和一個校對順序
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;