MySQL关于事务控制、视图、存储过程和函数
TCL語言:事務控制語言
MySQL不同的存儲引擎對事務的支持不同,MySQL默認的存儲引擎InnoDB支持事務。
事務的ACID屬性:
事務并發導致的各種問題:
-
臟讀問題:對于兩個事務T1和T2,T1讀取了T2以修改但未提交的數據,之后若T2回滾,T1讀取的內容就是無效的。(一般針對更新)
-
不可重復讀問題:對于兩個事務T1和T2,T1讀取了一個數據,然后T2更新了這個數據,T1再次讀取這個字段,值就不同了。(一般針對更新)
-
幻讀問題:對于兩個事務T1和T2,T1從這個表中讀取了一個字段,然后T2在該表中插入了一些新的行,如果T1再次讀取,就會多出幾行。(一般針對插入和刪除)
事務的隔離級別(MySQL支持):在并發的情況下,設置對數據操作的一種規定
設置事務的隔離級別:
set session transaction isolation level 隔離級別;MySQL事務的操作步驟:
①設置事務的隔離級別: set session transaction isolation level 隔離級別;(可選)
②開啟事務,關閉自動提交:set autocommit=0;
③執行sql語句(update、delete、insert、select);
④提交或者回滾:commit; rollback;數據要么提交要么回滾。
MySQL視圖:
含義:一種虛擬存在的表,只保存了sql邏輯,不保存查詢結果。
視圖的創建語法:
視圖的修改語法:
ALTER VIEW 視圖名 AS 【查詢語句】視圖的刪除語法:
DROP VIEW 視圖名1,視圖名2...【面試題】視圖和表的區別:
- 視圖不占用實際物理空間,表占用。
- 表可以進行增刪改,視圖一般不用。
變量
系統變量:變量由系統提供,不是用戶定義的。
- 全局變量(global):跨連接有效,但不能跨重啟。
- 回話變量(session):當前連接有效。
自定義變量:用戶自己定義的變量。
- 用戶變量
- 局部變量:應用在BEGIN END的第一句話中
系統變量使用語法:
①查看系統變量:
②查看系統變量的值:
SELECT @@global|session.系統變量名;③為系統變量賦值:
SET global|session 變量名= 值;自定義變量使用語法:
用戶變量:
局部變量:
BEGIN declare m int default 1; ... END存儲過程:類似java的方法(適合做增刪改的操作)
創建存儲過程的語法:
DELIMITER $ CREATE PROCEDURE getName(OUT stuName VARCHAR(20)) BEGIN SQL; SQL;END $;調用語法:
CALL 存儲過程名(實參列表) $案例:調用存儲過程,查看帳號和密碼用戶是否登錄成功
#定義存儲過程 DELIMITER $ CREATE PROCEDURE myp1(IN username VARCHAR(20),IN `password` VARCHAR(20)) BEGINDECLARE result INT DEFAULT 0;#聲明變量并初始化SELECT COUNT(*) INTO result #局部變量的賦值FROM admin WHERE admin.`username`=username AND admin.`password`=`password`;SELECT IF(result>0,'成功','失敗');END $ #調用存儲過程 CALL myp1('john','8888')函數:類似java的方法(適合做查詢并返回一個值的操作)
創建存儲過程的語法:
DELIMITER $ CREATE FUNCTION 函數名(參數名 參數類型,參數名 參數類型) RETURNS 返回類型 BEGIN函數體;return 值; END $調用語法:
SELECT 函數名(實參列表) $案例:返回一張表的總個數:
CREATE FUNCTION myf1() RETURNS INT BEGIN DECLARE m INT DEFAULT 0;#定義變量做返回值SELECT COUNT(*) INTO mFROM beauty;RETURN m;#返回定義的變量 END $SELECT myf1()查看和刪除存儲過程和函數:
#查看存儲過程 SHOW CREATE PROCEDURE myp1 #查看函數 SHOW CREATE FUNCTION myf1 #刪除存儲過程 DROP FUNCTION myf1 #刪除函數 DROP FUNCTION myf1總結
以上是生活随笔為你收集整理的MySQL关于事务控制、视图、存储过程和函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql基础(DQL语言、DML语言、
- 下一篇: Spring框架使用规范和IOC的开发