共計 2640 個字符,預計需要花費 7 分鐘才能閱讀完成。
本篇內容介紹了“MYSQL 數據庫的 TCL 語言和 DCL 語言是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、TCL 語言的操作語法,有時候我們的一個需求 (一個任務), 可能會涉及到多個 DML(增刪改) 操作。那么這一系列操作,我們要看成一個整體,不可切割。如在一個員工系統中,某員工 A 的數據可能會存在多個表中,如基本信息表, 業務信息表,郵箱信息表等。當我們想刪除此人的所有信息時,除了刪除這個人的基本信息外,還應該刪除與此人有關的其他所有信息,如郵箱,地址等等。這樣的操作會涉及到多個 DML 語句。那么從開始執行到真正結束,就會構成一個事務(Transaction)。對于事務,我們要保證事務的完整性,不能分割。事務要么成功,要么撤回(回到執行前),不能執行一部分就終止。
注意,只有 DML 操作時,才會涉及到事務。而 mysql 數據庫在執行完每一個 DML 操作時,會默認 commit; 可以使用 start transaction 來取消自動提交
commit:用于提交,表示事務成功結束。用于確認數據的更改,持久化。
rollback:用于回滾,回退到事務開始前。取消所有的 DML 操作。
savepoint: 設置事務的保存點,可以回退到指定的保存點。
事務有四個基本特征,簡稱 ACID.
(1) 原子性(Atomicity):即事務要么成功,要么撤回,不可切割。(2) 一致性(Consistency):事務開始前和結束后,要保證數據的一致性。如轉賬案例,轉賬前賬號 A 和賬號 B 的錢的總數為 10000。轉賬后賬號 A 和賬號 B 的錢的總數應該還是 10000;(3) 隔離性(Isolation):當涉及到多用戶操作同一張表時,數據庫為會每一個用戶開啟一個事務。那么當其中一個事務正在進行時,其他事務應該處于等待狀態。保證事務之間不會受影響。(4) 持久性(Durability):當一個事務被提交后,我們要保證數據庫里的數據是永久改變的。即使數據庫崩潰了,我們也要保證事務的完整性。
關于事務的隔離性,尤為重要。當多用戶 (多線程) 同時操作同一張表時,如果沒有隔離機制,可能會發生以下問題:
臟讀:事務 A 讀取了事務 B 剛剛更新的數據,但是事務 B 回滾了,這樣就導致事務 A 讀取的為臟數據,我們稱之為臟讀。如公司某財務人員更新公司入賬報表時,在 DML 語句中的數字后少添加了一個 0,但是未提交,然后吃飯,吃飯回來,發現錯誤,然后更正后做了提交。而在吃飯期間,老板要求秘書查看一下報表,秘書看到的是少個 0 的數據。這就是臟讀。
不可重復讀:事務 A 讀取同一條記錄兩次,但是在兩次之間事務 B 對該條記錄進行了修改并提交,導致事務 A 兩次讀取的數據不一致。它和臟讀的區別是,臟讀是事務 A 讀取了另一個事務 B 未提交的臟數據,而不可重復讀則是事務 A 讀取了事務 B 提交的數據。多數情況下,不可重復讀并不是問題,因為我們多次查詢某個數據時,當然要以最后查詢得到的結果為主。但在另一些情況下就有可能發生問題,比如,老板讓 B 和 C 分別核對事務 A 操作的數據,結果可能不同,老板是懷疑 B 呢,還是 C 呢?
幻讀:事務 A 在修改全表的數據,比如將字段 age 全部修改為 0 歲,在未提交時,事務 B 向表中插入或刪除數據,如插入一條 age 為 25 歲的數據。這樣導致事務 A 讀取的數據與需要修改的數據不一致,就和幻覺一樣。幻讀和不可重復讀的相同點:都是針對于另外一個已經提交的事務而言。不同點:不可重復讀是針對于同一條記錄來說的(delete 或 update 同一條記錄),而幻讀是針對于一批數據來說的(insert)
事務的隔離機制有以下四種:
1、未提交讀(read uncommitted):就是不做隔離控制,可以讀到“臟數據”,可能發生不可重復讀,也可能出現幻讀。2、提交讀(read committed):提交讀就是不允許讀取事務沒有提交的數據。顯然這種級別可以避免了臟讀問題。但是可能發生不可重復讀,幻讀。這個隔離級別是大多數數據庫(除了 mysql)的默認隔離級別。 3、可重復讀(repeatable read):為了避免提交讀級別不可重復讀的問題,在事務中對符合條件的記錄上 排他鎖,這樣其他事務不能對該事務操作的數據進行修改,可避免不可重復讀的問題產生。由于只對操作數據進行上鎖的操作,所以當其他事務插入或刪除數據時,會出現幻讀的問題,此種隔離級別為 Mysql 默認的隔離級別。4、序列化(Serializable),在事務中對表上鎖,這樣在事務結束前,其他事務都不能夠對表數據進行操作(包括新增,刪除和修改),這樣避免了臟讀,不可重復讀和幻讀,是最安全的隔離級別。但是由于該操作是堵塞的,因此會嚴重影響性能。
相關語法格式如下:
查看數據庫的當前隔離機制:select @@tx_isolation; 修改數據庫的隔離機制:set transaction isolation level 機制名稱 或者是 set tx_isolation= 機制名稱 如:set transaction isolation level read uncommitted 或者 set tx_isolation=‘read-uncommitted’;
二、DCL 語言的操作語法
(1)創建用戶:create user username@ip identified by newPassword;
(2)修改密碼:alter user username@ip identified by newPassword;
(3)顯示用戶的權限:show grants for username@ip;
(4)授權語句:grant 權限 1,權限 2,…… on databaseName.* to username@ip;
DDL 權限名稱: create、alter、drop、truncate、create view 等等
DML 權限名稱: insert、delete、update
DQL 權限名稱: select
(5)撤銷權限:revoke 權限 1,權限 2,….. on databaseName.* from username@ip;
(6)刪除用戶:drop user username;
(7)權限生效語句:flush privileges;
“MYSQL 數據庫的 TCL 語言和 DCL 語言是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!