1. 事务(Transaction)
    1. 事务基础
      1. 开始事务
        1. START TRANSACTION [WITH CONSISTENT SNAPSHOT] | BEGIN WORK
      2. 结束事务
        1. COMMIT【WORK】【AND 【NO】CHAIN】 【【NO】RELEASE】
      3. SET autocommit=
        1. 0, 取消自动提交,DML需要需要commit永久写入,也可以使用rollback,回滚
        2. 1,DML自动commit,无法rollback
    2. SAVEPOINT
      1. InnoDB支持SAVEPOINT和ROLLBACK TO SAVEPOINT
    3. 所谓的transaction mode是指autocommit=0的状态
  2. Main Topic 3
  3. MySQL的锁机制
    1. MySQL表级锁
      1. LOCK TABLES
        1. LOCK TABLES tbl_name [[AS] alias] Lock_type
        2. Lock_type类型:READ [LOCAL] | [LOW_PRIORITY]
          1. READ [LOCAL]: 当前session获得读锁
          2. 可以有多个session同时获得读锁
          3. 其它的session无需显示地获得读锁,也可以读取表
          4. LOCAL 标识符可以让其它的session进行无冲突的insert操作,不过对于InnoDB来说,LOCAL没有作用
          5. [LOW_PRIORITY] WRITE
          6. 当前session获得表的读写锁
          7. 只有获得该锁的session可以访问该表,其它session都不可以
          8. 所有对于该表的锁请求都会被block,直到write锁被释放
          9. LOW_PRIORITY的说明
          10. 一般情况下write锁的优先级要比read锁高
          11. LOW_PRIORITY使得read锁优先级比write要高
        3. 注意点
          1. 一个session要在一条lock tables语句中,获得它所需要的所有锁
          2. 如果一个session获得了某个锁,它只能访问获得了锁的表(INFORMATION_SCHEMA中的表例外)
        4. LOCAL TABLES按照以下方式获得锁
          1. 首先给所有要获得锁的表进行排序,对于用户来说,这个排序是透明的
          2. 如果一个表同时被请求了读锁和写锁,优先加上写锁
          3. 一次获得一个表的锁,直到当前的session获得所有的锁
      2. UNLOCK TABLES
        1. 显式地释放当前session在该表的所有锁
        2. 释放由"FLUSH TABLES WITH RAED LOCK"产生的GLOBAL READ LOCK
        3. 如果一个session已经获得了一些锁,同时又使用LOCK TABLES 语句,则自动释放这些已经获得的锁
        4. 如果一个session开始一个事务比如调用(START TRANSACTION),隐式调用UNLOCAK TABLES
      3. 对于异常的处理
        1. 如果一个session终止了,不管是正常的还是异常的,服务器会释放所有的锁
        2. 如果终止的session中有一个active transaction,服务器自动回滚这个transaction
        3. auto-reconnect对于客户端的操作有影响