Skip to content

QueenieCplusplus/SQL_DCL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 

Repository files navigation

SQL DCL

Data Control Language

  • GRANT

  • REVOKE

  • TRANSACTION

使用 Transaction 的話,能將多個 SQL 命令當成一個邏輯單位來處理,而交易功能和 DB 的排他控制有關。 倘若這些命令群沒有全部完成的話,就不接受使用者的要求,藉此保持資料的 Integrity!

Big 8 Features

舉 MySQL 為例子:

  1. Set Transaction Isolation Level < Level >

    Transaction 可設定為 Session 亦或是 Global。

    關於 session http://einverne.github.io/post/2017/05/sqlalchemy-session.html

    參數則可設定為只讀取,即 select,其他操作則錯誤。

    level 參數包含四種隔離等級:

    • UR, Read Uncommitted == Uncommited Read (未確定的讀取)

      因為資料不被鎖定,只要在 commit 前都能進行變更,容易讀取到資料異動前的錯誤資料,造成髒讀, 但優點是具備快速讀取。

    • CS, Read Committed == Cursor Stabilty (游標穩定性)

      讀取僅參照到變更的資料。(這是大多數資料庫所採用的隔離等級!)

    • RS, Repeatable Read == Read Stability (讀取穩定性)

      保證在交易功能內,無論執行多少次檢索指令,均可獲的相同結果。

    • RR, Serializable == Repeatable Read (可重複讀取)

      在交易功能開始之前,才能參照到 commit 內容。

  2. Begin [work]

    使用交易功能,能將多個 insert 或是 update 統合在一起,並且用 Begin 開啟交易。(某些除外,例如 Oracle 和 DB2 一直都是啟動狀態,所以沒有 begin 功能的命令)

    在交易開始時,update 和 insert 只有保留狀態,直到 Commit 命令執行,才能讓 SQL 命令有效,結束交易功能,而使用 RollBack 則使整筆交易無效。倘若一整串命令中,造成資料遺失或重複,則可使用 RollBack 回滾功能的資料控制命令!

  3. Commit [work]

    很多用來執行 SQL 的用戶端工具,都具備自動 Commit 模式,在此模式中,執行 SQL 指令會自動執行 Commit。倘若要自己控制的話,就要關閉此預設模式,而且即使在自動 Commit 模式下,也可使用 Begin 來啟動交易功能。

    其他類似用戶端工具的仲介軟體也具備自動 Commit 功能,可藉由仲介軟體稱為 Connection 的物件,呼叫其方法(通常命名方式與 SQL 指令相同), 便可讓交易功能執行 SQL 指令。

  4. Rollback [work] To [savepoint]

    將資料回復到交易功能中的 A 儲存點。

  5. Savepoint < savepoint > on rollback retain cursors

    使用此命令可在交易功能中定義儲存點。(作為 Begin、Commit、Rollback 等控制命令的中間點)

  6. Select < column From table_name Where expression > For Update

    列鎖定

  7. Lock Tables < table_name > < mode >

    資料表鎖定

    鎖定資料表。此鎖具有排他性,無法從別的 session 來進行所定(即此新的鎖定也會被封鎖)。 這適用於交易功能彼此產生衝突,後進行的交易功能會被阻擋住,暫時無法執行!這是因為先執行的命令, 把資料表的資料給鎖上了的關係。一旦前者的交易完成,方才解鎖,而後被擋執行的交易,方才能開始執行。

  8. Unlock Tables

    解除資料表的鎖定狀態。

  9. 其他

    關於資料表的鎖定,或是資料列的鎖定, SQLite 比較特殊,因為和程式碼直接結合的關係,所以鎖定單位是資料庫檔案。

Releases

No releases published

Packages

No packages published