1. 程式人生 > 其它 >MySQL基礎筆記(7) - 函式&其它雜項

MySQL基礎筆記(7) - 函式&其它雜項

本文為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;