【Day 14】MySQL Basics III:Transactions / Locks

昨天的崩溃文比平常文章更多点击 笑死 我还没更新..
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 14— To Do List (1) 专案前置

>>:  成员 17 人:60%的人在 10分钟的谈话中,至少会撒 1次谎

第二十九天:版面组合与重构

金鱼都能懂的网页切版:26、27 版面组合 https://codepen.io/mikeyam/p...

如何在Windows 10中启用或禁用系统保留存储

从Windows 10 1903版开始,有一项名为保留存储(Reserved Storage)的新功...

企划实现(14)

GOOGLE登入 第八步:宣告 GoogleSignInClient mgoogleSignInCl...

[Day05] 如何将字元对应到阵列上

#387 - First Unique Character in a String 连结: htt...

Day25:复数聊天室

铁人赛写到後面,似乎有种越来越难施力的困窘,果然要完整写完系列笔记,除了需要先列好大纲外,还需要提前...