1,事務的屬性(ACID)
1.1,原子性(A):事務是一個不可分割的單位,事務中的操作要麼全部執行,要麼全部不執行.
1.2,一致性(C):事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態
1.3,隔離性(I):多個事務之間互不干擾
1.4,持久性(D):事務一旦提交,就會永久性的改變數據庫的數據
2,事務例子
SET autocommit = 0;#關閉自動提交
START TRANSACTION;#開啓事務
SELECT 1;#語句1
SELECT 2;#語句2
COMMIT;#提交事務
ROLLBACK;#回滾事務
3,事務隔離級別
3.1,讀未提交:允許事務讀取未被提交的事務,會出現髒讀,不可重複讀,幻讀
3.2,讀已提交:只允許讀取提交的事務,可以避免髒讀,但會出現不可重複讀和幻讀
3.3,可重複讀:確保事務多次從一個字段中讀取相同的值,但事務期間不允許修改,避免髒讀和不可重複讀,但依然會幻讀
3.4,串行化:確保事務從一個表中讀取相同的行,在這個事務之間,禁止其他事務對這個表進行更新操作,沒有併發問題,但性能較低
4,視圖
4.1,創建或修改
create or replace view 視圖名
as
查詢語句;
4.2,操作和表大致相同,增刪改會更新原始表的數據
4.3,不能更新的視圖
4.3.1,分組函數:distinct,group,by,having,union,union all
4.3.2,常量視圖
4.3.3,select中包含子查詢
4.3.4,包含join或者from後面有多個表
4.3.5,from加上一個不可更新的視圖
4.3.6,where子查詢引用了from子句中的表
5,變量
全局變量對所有連接有效,重啓之後恢復默認;
會話變量只對本次連接有效;
用戶變量是對當前連接有效的自定義變量;
局部變量僅僅在定義它的begin end塊中有效(放在第一句)
5.1,查看所有系統變量:SHOW GLOBAL(SESSION) VARIABLES;
5.2,查看滿足條件系統變量:SHOW GLOBAL(SESSION) VARIABLES LIKE '%char%'
5.3,精確查看系統變量:select @@GLOBAL(SESSION)系統變量名
5.4,爲系統變量賦值:set GLOBAL(SESSION) 系統變量名 = 值;或set @@GLOBAL(SESSION).系統變量名 = 值
5.5,自定義變量[用戶變量]:
5.5.1,申明:set @變量名=值|set @變量名:=值|select @變量名:=值
5.5.2,賦值:select 字段 into @變量名 from 表
5.5.3,查看:select @變量名
5.6,自定義變量[局部變量]:
5.6.1,申明:DECLARE 變量名 類型 | DECLARE 變量名 類型 DEFAULT 值
5.6.2,賦值:set 變量名=值 | set 變量名 := 值 | select @變量名:=值 | select 字段 into 變量名 from 表
5.6.3,查看:select 變量名
6.存儲過程:一組預先編譯好的sql語句的集合,類似於java中的方法
6.1,好處:代碼重用;簡化操作;減少連接數據庫;提高效率
6.2,創建:
DELIMITER $
CREATE PROCEDURE 存儲過程名(參數列表)
BEGIN
存儲過程體
END $
參數列表(參數模式 參數名 參數類型)
參數模式
in:入參
out:出參
inout:入出參數
結束符:DELIMITER 符號
調用
call 存儲過程名(參數列表)
6.3,刪除:drop PROCEDURE 存儲過程名;
6.4,查看:show create procedure 存儲過程名
7,函數
7.1,創建:
DELIMITER $
CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
函數體
END $
DELIMITER ;
參數列表(參數名 參數類型)
函數體包含return語句
調用select 函數名(參數列表)
8,case結構
case 字段|變量|表達式
when 值1 then 返回值1(語句)
when 值2 then 返回值2(語句)
else 默認值(語句)
end [case]
case
when 條件1 then 返回值1(語句)
when 條件2 then 返回值2(語句)
else 默認值(語句)
end [case]
語句只能放在函數或存儲過程中
9,if結構
if 條件1 then 語句1;
elseif 條件2 then 語句2;
else 語句n;
end if;
10,循環結構
分類:while, loop, repeat
循環控制:
iterate:類似continue
leave:類似break
while循環:
[標籤:]while 循環條件 do
循環體;
end while [標籤]
loop循環:(搭配leave使用)
[標籤:]loop
循環體;
end loop [標籤]
repeat循環:
[標籤:]repeat
循環體;
until 條件
end repeat[標籤]