iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0

昨天的崩潰文比平常文章更多點擊 笑死 我還沒更新..
transaction isolation 部分之後如果讀了更多比較有東西寫的話,會更新在這

推薦做做 SQLBolt 題目提升語法熟悉度

今天把飛飛推薦的 SQLBolt 做完,
好處是每章下面的練習題體驗很不錯(query時會馬上顯示現在sql的結果),
題目偏簡單,但對於學基本 sql syntax 還不錯。

對每天念 MySQL Basics 的 tutorials 感到有點厭倦XD
先跳去看看比較有興趣的,還想多一點 mysql 背後運作細節。

本篇包含 1 section:
10. transaction / locks

10. transactions / locks

覺得這篇教學沒寫得很好@@ 有些東西是自己補充

transaction

ACID

syntax

START TRANSACTIONBEGINBEGIN WORK 開頭
COMMIT
ROLLBACK

這邊好像需要多點例子比較好
SET autocommit = 0; 預設為1

4 個隔離級別(isolation level)

再補充
由寬鬆 -> 嚴格:

  • read uncommitted
    可以讀其他 transaction 還沒 commit 的資料,如果 rollback 的話,就等於讀到了被取消的資料(dirty read)
  • read committed
    兩次 select 之間若有其他 transaction commit,會導致讀到不同資料。(phantom read)
  • repeatable read(innodb 預設)
    一個 transaction 內,除非自己修改不然 select 結果會一樣
  • serializable

多個 transaction 進行時,read 可能發生的現象(問題)

再補充

  • phantom read
  • dirty read
  • non-repeatable read

table locking

一個 sql server 可以有很多 client session 連,lock 某張表 可以避免一些同時間操作導致的衝突

  • session 突然中止,MySQL 會把他的所有 lock 解除
  • SHOW PROCESSLIST; 確認狀態,例如是否在 waiting

syntax

LOCK TABLES table_name1 [READ | WRITE], 
            table_name2 [READ | WRITE],
             ... ;
UNLOCK TABLES

read lock(shared lock)

  • 有 read lock 的 session 只能讀不能寫
  • 同時可以有多個 session 對同張表有 read lock,而且沒有 read lock 也是可以讀取資料
  • 某張表有 read lock 時,其他 session 不能寫

write lock(exclusive lock)

  • 有 write lock 的 session 可讀可寫
  • 同時只能一個 session 有 write lock
  • 其他 sessions 不能讀寫有 write lock 的表

上一篇
【Day 13】MySQL Basics II
下一篇
【Day 15】Python MySQL
系列文
什麼都不會還敢說你是 RD 啊?畢業後的後端入職前準備31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言