五、運算符和函數
5.1、字符函數
名稱 | 描述 | 說明 |
CONCAT() | 字符連接 | CONCAT(str1,str2,...);SELECT CONCAT(first,second) AS name FROM user |
CONCAT_WS() | 使用指定的分隔符進行連接 | CONCAT_WS(str1,str2,...);SELECT CONCAT(‘-’,'imooc','MYSQL') |
FORMAT() | 數字格式化 | FORMAT(NUMBER,n);保留n爲小數,返回字符型數字 |
LOWER() | 轉換成小寫字母 | |
UPPER() | 轉換成大寫字母 | |
LEFT() | 獲取左側字符 | LEFT(str,n) |
RIGHT() | 獲取右側字符 | |
LENGTH() | 獲取字符串長度 | |
LIRIM() | 刪除前導空格 | |
RTRIM() | 刪除後續空格 | |
TRIM() | 刪除前導和後續空格 | |
SUBSTRING() | 字符串截取 | 位置可以爲負值,但是長度不能爲負值 |
[NOT]LIKE | 模式匹配 | like+通配符進行過濾,“%”任意字符出現任意次數,"_"匹配單個字符, "[JM]"以J或M開頭的,"[^JM]"不易J或M開頭的,[]指定範圍的單個字符 |
REPLACE() | 字符串替換 |
5.2、數值運算符及函數
名稱 | 描述 | 說明 |
CEIL() | 進一取整 | 向上取整,ceil(2.99)=3 |
DIV | 整數除法 | |
FLOOR() | 舍一取整 | |
MOD | 取餘數(取模) | |
POWER() | 冪運算 | |
ROUND() | 四捨五入 | ROUND(NUM,n),n爲保留幾位小數 |
TRUNCATE() | 數字截取 | TRUNCATE(NUM,n),注意TRUNCATE(125.89,0)=125,TRUNCATE(125.89,-1)=120, TRUNCATE(125.89,-2)=100,TRUNCATE(125.89,-3)=0 |
5.3、比較遠算符及函數
名稱 | 描述 | 說明 |
[NOT]BETWEEN...AND... | [不]在範圍之內 | |
[NOT]IN() | [不]在列出值範圍內 | |
IS [NOT] NULL | [不]爲空 |
5.4、日期時間函數
名稱 | 描述 | 說明 |
NOW() | 當前日期和時間 | |
CURDATE() | 當前日期 | |
CURTIME() | 當前時間 | |
DATE_ADD() | 日期變化 | SELECT DATE_ADD('2014-3-12',INTERVAL 1 YEAR),這個輸出爲2015-03-12 |
DATEDIFF() | 日期差值 | |
DATE_FORMAT() | 日期格式化 |
5.5、信息函數
名稱 | 描述 |
COUNECTION_ID() | 連接ID |
DATABASE() | 當前數據庫 |
LAST_INSERT_ID() | 最後插入記錄的ID號。注意:不管一次插入幾條記錄,返回的都是最後一條的ID號 |
USER() | 當前用戶 |
VERSION() | 版本信息 |
5.6、聚合函數
名稱 | 描述 | 說明 |
AVG() | 平均數,NULL 值不包括在計算中 | SELECT customers FROM Orders WHERE orderPrice>(SELECT AVG(orderPrice) FROM Orders) |
COUNT() | 計數,NULL值不計入 | SELECT COUNT(*) FROM tbl_name//返回表中的記錄數 SELECT COUNT(DISTINCT column_name) FROM tbl_name;//返回指定列不通知的數目 |
MAX() | 最大值 | |
MIN() | 最小值 | |
SUM() | 求和 |
5.7、加密函數
名稱 | 描述 | 說明 |
MD5() | 信息摘要算法 | SELECT MD5('KCY') |
PASSWORD() | 密碼算法 | SET PASSWORD = PASSWORD('root);將用戶的密碼修改成root |
5.8、自定義函數
創建自定義函數:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} rountine_body
例如:1)編寫一個無參函數,改寫日期的格式
CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURNS DATE_FORMAT(NOW(),%Y年%m月%d日 %H點%i分%s秒");
調用:SELECT f1();
2)編寫一個有參函數來計算均值
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS float(10,2)unsigned return (num1+num2)/2;
調用:SELECT f2(10,15);
六、MYSQL中的存儲引擎
6.1、存儲引擎就是以不同的存儲機制、索引、鎖方式等技術將數據存儲在文件或者內存中;
常見的存儲引擎有MyISAM、InnoDB、Menory、Archive等
6.2、併發控制,多個連接對數據庫進行修改時保證數據的一致性和完整性,MySQL提供兩個級別的併發控制分別爲服務器級和存儲引擎級。
6.3、鎖,實現併發控制的一種方法。
1)、鎖分爲共享鎖(讀個用戶可同時進行讀操作)和排他鎖(只有一個用戶進行寫操作)
2)、鎖的粒度表級鎖(開銷較小)和行級索(開銷較大)。
6.4、事務,是恢復和併發控制的基本單位;
1)、數據庫事務的四特性ACID如下:
Atomic 原子性,整個數據庫事務是不可分割的工作單位
Consistency 一致性,數據庫事務不能破壞關係數據的完整性以及業務邏輯上的一致性
Isolation 隔離性,在併發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間
Durability 持久性,指的是隻要事務成功結束,它對數據庫所做的更新就必須永久保存下來
2)、事務的隔離級別
Serializable:可避免髒讀、不可重複讀、虛讀情況的發生。
Repeatable read:可避免髒讀、不可重複讀情況的發生。(可重複讀,是 mysql 默認的事務隔離級別)
Read committed:可避免髒讀情況發生。(讀取已提交的數據)
Read uncommitted:最低級別,以上情況均無法保證。(讀取到了未提交的數據)
3)、實際的開發過程用到事務開啓、回滾、關閉等操作,保證數據的正確性。
6.5、索引,在存儲引擎級別實現的,對一行或者多行記錄進行排序的結構,包含普通索引、唯一索引、主鍵索引、組合索引等,索引的創建同表的創建
create [unique]index on t_name(字段);
6.6、不同存儲引擎之間的對比
1)、MyISAM:存儲限制爲256TB,支持索引,表鎖,可進行數據壓縮
2)、InnoDB: 存儲限制爲64TB, 支持事務,支持索引,行鎖,支持外鍵
3)、Memory: 存在內存中,支持索引,表鎖
4)、Archive:無存儲限制,行鎖,支持數據壓縮