溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MYSQL數(shù)據(jù)庫的TCL語言和DCL語言是什么

發(fā)布時間:2021-12-04 14:21:49 來源:億速云 閱讀:181 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“MYSQL數(shù)據(jù)庫的TCL語言和DCL語言是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、TCL語言的操作語法,有時候我們的一個需求(一個任務(wù)),可能會涉及到多個DML(增刪改)操作。那么這一系列操作, 我們要看成一個整體,不可切割。如在一個員工系統(tǒng)中,某員工A的數(shù)據(jù)可能會存在多個表中,如基本信息表,業(yè)務(wù)信息表,郵箱信息表等。當(dāng)我們想刪除此人的所有信息時,除了刪除這個人的基本信息外,還應(yīng)該刪除與此人有關(guān)的其他所有信息,如郵箱,地址等等。這樣的操作會涉及到多個DML語句。那么從開始執(zhí)行到真正結(jié)束,就會構(gòu)成一個事務(wù)(Transaction)。對于事務(wù),我們要保證事務(wù)的完整性,不能分割。事務(wù)要么成功, 要么撤回(回到執(zhí)行前),不能執(zhí)行一部分就終止。

  注意,只有DML操作時,才會涉及到事務(wù)。而mysql數(shù)據(jù)庫在執(zhí)行完每一個DML操作時,會默認(rèn)commit; 可以使用start transaction來取消自動提交

commit:用于提交,表示事務(wù)成功結(jié)束。用于確認(rèn)數(shù)據(jù)的更改,持久化。

rollback:用于回滾,回退到事務(wù)開始前。取消所有的DML操作。

savepoint: 設(shè)置事務(wù)的保存點,可以回退到指定的保存點。

事務(wù)有四個基本特征,簡稱ACID.

(1) 原子性(Atomicity): 即事務(wù)要么成功,要么撤回,不可切割。(2) 一致性(Consistency):事務(wù)開始前和結(jié)束后,要保證數(shù)據(jù)的一致性。如轉(zhuǎn)賬案例,轉(zhuǎn)賬前賬號A和賬號B的錢的總數(shù)為10000。轉(zhuǎn)賬后賬號A和賬號B的錢的總數(shù)應(yīng)該還是10000;(3) 隔離性(Isolation):當(dāng)涉及到多用戶操作同一張表時,數(shù)據(jù)庫為會每一個用戶開啟一個事務(wù)。那么當(dāng)其中一個事務(wù)正在進(jìn)行時,其他事務(wù)應(yīng)該處于等待狀態(tài)。保證事務(wù)之間不會受影響。(4) 持久性(Durability): 當(dāng)一個事務(wù)被提交后,我們要保證數(shù)據(jù)庫里的數(shù)據(jù)是永久改變的。即使數(shù)據(jù)庫崩潰了,我們也要保證事務(wù)的完整性。

關(guān)于事務(wù)的隔離性,尤為重要。當(dāng)多用戶(多線程)同時操作同一張表時,如果沒有隔離機制,可能會發(fā)生以下問題:

臟讀:事務(wù)A讀取了事務(wù)B剛剛更新的數(shù)據(jù),但是事務(wù)B回滾了,這樣就導(dǎo)致事務(wù)A讀取的為臟數(shù)據(jù),我們稱之為臟讀。如公司某財務(wù)人員更新公司入賬報表時,在DML語句中的數(shù)字后少添加了一個0,但是未提交,然后吃飯,吃飯回來,發(fā)現(xiàn)錯誤,然后更正后做了提交。而在吃飯期間,老板要求秘書查看一下報表,秘書看到的是少個0的數(shù)據(jù)。這就是臟讀。

不可重復(fù)讀:事務(wù)A讀取同一條記錄兩次,但是在兩次之間事務(wù)B對該條記錄進(jìn)行了修改并提交,導(dǎo)致事務(wù)A兩次讀取的數(shù)據(jù)不一致。它和臟讀的區(qū)別是,臟讀是事務(wù)A讀取了另一個事務(wù)B未提交的臟數(shù)據(jù),而不可重復(fù)讀則是事務(wù)A讀取了事務(wù)B提交的數(shù)據(jù)。多數(shù)情況下,不可重復(fù)讀并不是問題,因為我們多次查詢某個數(shù)據(jù)時,當(dāng)然要以最后查詢得到的結(jié)果為主。但在另一些情況下就有可能發(fā)生問題,比如,老板讓B和C分別核對事務(wù)A操作的數(shù)據(jù),結(jié)果可能不同,老板是懷疑B呢,還是C呢?

幻讀:事務(wù)A在修改全表的數(shù)據(jù),比如將字段age全部修改為0歲,在未提交時,事務(wù)B向表中插入或刪除數(shù)據(jù),如插入一條age為25歲的數(shù)據(jù)。這樣導(dǎo)致事務(wù)A讀取的數(shù)據(jù)與需要修改的數(shù)據(jù)不一致,就和幻覺一樣?;米x和不可重復(fù)讀的相同點:都是針對于另外一個已經(jīng)提交的事務(wù)而言。不同點:不可重復(fù)讀是針對于同一條記錄來說的(delete或update 同一條記錄),而幻讀是針對于一批數(shù)據(jù)來說的(insert)

事務(wù)的隔離機制有以下四種:

1、未提交讀(read uncommitted):就是不做隔離控制,可以讀到“臟數(shù)據(jù)”,可能發(fā)生不可重復(fù)讀,也可能出現(xiàn)幻讀。2、提交讀(read committed):提交讀就是不允許讀取事務(wù)沒有提交的數(shù)據(jù)。顯然這種級別可以避免了臟讀問題。但是可能發(fā)生不可重復(fù)讀,幻讀。這個隔離級別是大多數(shù)數(shù)據(jù)庫(除了mysql)的默認(rèn)隔離級別。 3、可重復(fù)讀(repeatable read):為了避免提交讀級別不可重復(fù)讀的問題,在事務(wù)中對符合條件的記錄上"排他鎖",這樣其他事務(wù)不能對該事務(wù)操作的數(shù)據(jù)進(jìn)行修改,可避免不可重復(fù)讀的問題產(chǎn)生。由于只對操作數(shù)據(jù)進(jìn)行上鎖的操作,所以當(dāng)其他事務(wù)插入或刪除數(shù)據(jù)時,會出現(xiàn)幻讀的問題,此種隔離級別為Mysql默認(rèn)的隔離級別。4、序列化(Serializable),在事務(wù)中對表上鎖,這樣在事務(wù)結(jié)束前,其他事務(wù)都不能夠?qū)Ρ頂?shù)據(jù)進(jìn)行操作(包括新增,刪除和修改),這樣避免了臟讀,不可重復(fù)讀和幻讀,是最安全的隔離級別。但是由于該操作是堵塞的,因此會嚴(yán)重影響性能。

相關(guān)語法格式如下:

查看數(shù)據(jù)庫的當(dāng)前隔離機制: select @@tx_isolation;修改數(shù)據(jù)庫的隔離機制:set transaction isolation level 機制名稱 或者是 set tx_isolation='機制名稱';如:set transaction isolation level read uncommitted 或者 set tx_isolation=‘read-uncommitted’;

二、DCL語言的操作語法

(1)創(chuàng)建用戶:create user username@ip identified by newPassword;

(2)修改密碼:alter user username@ip identified by newPassword;

(3)顯示用戶的權(quán)限:show grants for username@ip;

(4)授權(quán)語句:grant 權(quán)限1,權(quán)限2,...... on databaseName.* to username@ip;

DDL權(quán)限名稱: create、alter、drop、truncate 、create view 等等

DML權(quán)限名稱: insert、delete、update

DQL權(quán)限名稱: select

(5)撤銷權(quán)限:revoke 權(quán)限1,權(quán)限2,..... on databaseName.* from username@ip;

(6)刪除用戶:drop user username;

(7)權(quán)限生效語句:flush privileges;

“MYSQL數(shù)據(jù)庫的TCL語言和DCL語言是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI