6.5 條件判斷函數
條件判斷函數也被稱爲控制流程函數,根據知足的條件的不一樣,執行相應的流程,Mysql中進行條件判斷的有IF,IFNULL,和CASE。
6.5.1 IF(expr,v1,v2)函數
IF(expr,v1,v2)若是表達式expr是true(expr<>0 and expr<>NULL),則IF()的返回值爲v1,不然返回v2。IF()的返回值爲數字或字符串值。
SELECT IF(1>2,2,3),IF(1<2,'YES','NO'),IF(STRCMP('TEST','TEST1'),'NO','YES');
若是v1或者v2中只有一個明確是NULL,則IF()函數的結果類型爲非NULL表達式結果類型。
6.5.2 IF(v1,v2)函數
IFNULL(v1,v2)加入v1不爲NULL,則IFNULL()的值爲v1,不然返回值爲v2,IFNULL的返回值是數字或者字符串。
SELECT IFNULL(1,2),IFNULL(NULL,10),IFNULL(1/0,'WRONG');
注意:1/0的結果爲空,所以IFNULL(1/0,'wrong')返回wrong.
6.5.3 CASE函數
CASE expr WHEN v1 THEN[WHEN v2 THEN r2][ELSE rn] END.
該函數表示,若是expr值等於某個vn,則返回對應THEN後面的結果,若是與全部值都不相同則返回ELSE後面的rn。
SELECT
CASE 5
WHEN 1 THEN
'one'
WHEN 2 THEN
'two'
ELSE
'more'
END;
CASE後面的值爲2,與第二條分支語句WHEN後面的值相等,所以返回'two'。
SELECT
CASE
WHEN 1 < 0 THEN
'true'
ELSE
'false'
END;
1<0結果爲false,所以函數返回值爲ELSE後的'false'
6.6 系統信息函數
Mysql中的系統信息有,數據庫的版本號、當前用戶名和鏈接數、系統字符集、最後一個自動生成的ID值。
6.6.1 獲取mysql中的版本號,鏈接數,數據庫名的函數。
SELECT VERSION()
返回指示mysql服務器版本的字符串,這個字符串使用utf8字符集。
SELECT CONNECTION_ID()
SHOW PROCESSLIST;
6.6.2 獲取用戶名的函數
USER(),CURRENT_USER,CURRENT_USER(),SYSTEM_USER()和SESSION_USER()這幾個函數返回當前被mysql服務器驗證的用戶名和主機名組合。通常狀況下這幾個函數返回值是相同的。
SELECT USER(),CURRENT_USER(),SYSTEM_USER();
6.6.3 獲取字符串的字符集和排序方式的函數
SELECT
CHARSET('abc'),
CHARSET(CONVERT('abc' USING latin1)),
CHARSET(VERSION())
SELECT
collation('abc'),
COLLATION(CONVERT('abc' USING utf8))
6.6.4 獲取最後一個自動生成的ID值的函數
LAST_INSERT_ID自動返回最後一個INSERT或者UPDATE爲AUTO_INCREMENT列設置的第一個發生的值。
- 一次插入一條記錄
INSERT INTO worker VALUES(NULL,'jimy');
INSERT INTO worker VALUES(NULL,'tony');
SELECT LAST_INSERT_ID();
- 一次同時插入多條
INSERT INTO worker VALUES(NULL,'kevry'),(NULL,'LILI'),(NULL,'miaomiao');
6.7 加密函數
6.7.1 加密函數PASSWORD(str)
6.7.2 加密函數MD5(str)
6.7.3 加密函數ENCODE(str,pswd_str)
6.7.4 解密函數DECODE(crypt_str,pswd_str)