日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL关于事务控制、视图、存储过程和函数

發(fā)布時間:2025/3/21 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL关于事务控制、视图、存储过程和函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

TCL語言:事務(wù)控制語言

MySQL不同的存儲引擎對事務(wù)的支持不同,MySQL默認(rèn)的存儲引擎InnoDB支持事務(wù)。

事務(wù)的ACID屬性:

  • 原子性:事務(wù)是不可分割的工作單位,要么都發(fā)生,要么都不發(fā)生。
  • 一致性:事務(wù)必須由一個狀態(tài)轉(zhuǎn)化為另一個一致狀態(tài)。
  • 隔離性:事務(wù)的執(zhí)行不可被其他事務(wù)干擾,并發(fā)執(zhí)行的各個事務(wù)不相互干擾。
  • 持久性:事務(wù)一旦提交,即為永久性改變。其他操作和數(shù)據(jù)庫故障不應(yīng)該對其有任何影響。
  • 事務(wù)并發(fā)導(dǎo)致的各種問題:

    • 臟讀問題:對于兩個事務(wù)T1和T2,T1讀取了T2以修改但未提交的數(shù)據(jù),之后若T2回滾,T1讀取的內(nèi)容就是無效的。(一般針對更新)

    • 不可重復(fù)讀問題:對于兩個事務(wù)T1和T2,T1讀取了一個數(shù)據(jù),然后T2更新了這個數(shù)據(jù),T1再次讀取這個字段,值就不同了。(一般針對更新)

    • 幻讀問題:對于兩個事務(wù)T1和T2,T1從這個表中讀取了一個字段,然后T2在該表中插入了一些新的行,如果T1再次讀取,就會多出幾行。(一般針對插入和刪除)

    事務(wù)的隔離級別(MySQL支持):在并發(fā)的情況下,設(shè)置對數(shù)據(jù)操作的一種規(guī)定

  • READ UNCOMMITED(讀未提交數(shù)據(jù)):三個問題都解決不了。
  • READ COMMITED(讀已提交數(shù)據(jù)):能解決臟讀問題。
  • REPEATABLE READ(讀重復(fù)數(shù)據(jù)):MySQL默認(rèn),意思是我在讀取數(shù)據(jù)的時候,其他事務(wù)不可以操作數(shù)據(jù)庫中已有的數(shù)據(jù),能解決臟讀和不可重復(fù)讀問題,但其他事務(wù)可以進(jìn)行添加和刪除操作,所有還是會有幻讀的問題。
  • SERIALIZABLE(序列化):三個問題都能解決,相當(dāng)于單線程,我現(xiàn)在操作的數(shù)據(jù),別人不能對這條數(shù)據(jù)進(jìn)行任何操作,性能低消耗大。
  • 設(shè)置事務(wù)的隔離級別:

    set session transaction isolation level 隔離級別;

    MySQL事務(wù)的操作步驟:

    ①設(shè)置事務(wù)的隔離級別: set session transaction isolation level 隔離級別;(可選)
    ②開啟事務(wù),關(guān)閉自動提交:set autocommit=0;
    ③執(zhí)行sql語句(update、delete、insert、select);
    ④提交或者回滾:commit; rollback;數(shù)據(jù)要么提交要么回滾。

    MySQL視圖:

    含義:一種虛擬存在的表,只保存了sql邏輯,不保存查詢結(jié)果。
    視圖的創(chuàng)建語法:

    CREATE VIEW 視圖名 AS 【查詢語句】

    視圖的修改語法:

    ALTER VIEW 視圖名 AS 【查詢語句】

    視圖的刪除語法:

    DROP VIEW 視圖名1,視圖名2...

    【面試題】視圖和表的區(qū)別:

    • 視圖不占用實際物理空間,表占用。
    • 表可以進(jìn)行增刪改,視圖一般不用。

    變量

    系統(tǒng)變量:變量由系統(tǒng)提供,不是用戶定義的。

    • 全局變量(global):跨連接有效,但不能跨重啟。
    • 回話變量(session):當(dāng)前連接有效。

    自定義變量:用戶自己定義的變量。

    • 用戶變量
    • 局部變量:應(yīng)用在BEGIN END的第一句話中

    系統(tǒng)變量使用語法:
    ①查看系統(tǒng)變量:

    SHOW SESSION VARIABLES;SHOW GLOBAL VARIABLES;

    ②查看系統(tǒng)變量的值:

    SELECT @@global|session.系統(tǒng)變量名;

    ③為系統(tǒng)變量賦值:

    SET global|session 變量名=;

    自定義變量使用語法:
    用戶變量:

    set @m=1; set @n=2; set @sum= @m + @n; select @sum;

    局部變量:

    BEGIN declare m int default 1; ... END

    存儲過程:類似java的方法(適合做增刪改的操作)

    創(chuàng)建存儲過程的語法:

    DELIMITER $ CREATE PROCEDURE getName(OUT stuName VARCHAR(20)) BEGIN SQL; SQL;END $;

    調(diào)用語法:

    CALL 存儲過程名(實參列表) $

    案例:調(diào)用存儲過程,查看帳號和密碼用戶是否登錄成功

    #定義存儲過程 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 $ #調(diào)用存儲過程 CALL myp1('john','8888')

    函數(shù):類似java的方法(適合做查詢并返回一個值的操作)

    創(chuàng)建存儲過程的語法:

    DELIMITER $ CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類型,參數(shù)名 參數(shù)類型) RETURNS 返回類型 BEGIN函數(shù)體;return; END $

    調(diào)用語法:

    SELECT 函數(shù)名(實參列表) $

    案例:返回一張表的總個數(shù):

    CREATE FUNCTION myf1() RETURNS INT BEGIN DECLARE m INT DEFAULT 0;#定義變量做返回值SELECT COUNT(*) INTO mFROM beauty;RETURN m;#返回定義的變量 END $SELECT myf1()

    查看和刪除存儲過程和函數(shù):

    #查看存儲過程 SHOW CREATE PROCEDURE myp1 #查看函數(shù) SHOW CREATE FUNCTION myf1 #刪除存儲過程 DROP FUNCTION myf1 #刪除函數(shù) DROP FUNCTION myf1

    總結(jié)

    以上是生活随笔為你收集整理的MySQL关于事务控制、视图、存储过程和函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。