Mysql锁的使用及事务控制基本命令总结

lock table A read/write

获得表 A 的 READ/WRITE 锁定

unlock tables

释放所有表锁
21080325_1

事务控制

MySQL 通过 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等语句支持本地事务,具体语法如下。
**START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}**

默认情况下,MySQL 是自动提交(Autocommit)的,(自动执行start transaction和commit命令)

  1. START TRANSACTION或 BEGIN语句可以开始一项新的事务。
  2. COMMIT 和ROLLBACK 用来提交或者回滚事务。
  3. CHAIN 和 RELEASE 子句分别用来定义在事务提交或者回滚之后的操作,CHAIN 会立即启动一个新事物,并且和刚才的事务具有相同的隔离级别,RELEASE 则会断开和客户端的 连接。
  4. SET AUTOCOMMIT 可以修改当前连接的提交方式,如果设置了 SET AUTOCOMMIT=0,则设置之后的所有事务都需要通过明确的命令进行提交或者回滚。

20180325_2
20180325_3
20180325_4
20180325_5

如果在锁表期间,用 start transaction 命令开始一个新事务,会造成一个隐含的 unlock tables 被执行

20180325_6
20180325_7

注意,上表中的rollback命令无作用,因为对lock 方式加的表锁,不能通过rollback进行回滚。

回滚的灵活用法:SAVEPOINT

在事务中可以通过定义 SAVEPOINT,指定回滚事务的一个部分,但是不能指定提交事务的一个部分。对于复杂的应用,可以定义多个不同的 SAVEPOINT,满足不同的条件时,回滚不同的 SAVEPOINT。需要注意的是,如果定义了相同名字的 SAVEPOINT,则后面定义的 SAVEPOINT 会覆盖之前的定义。对于不再需要使用的 SAVEPOINT,可以通过 RELEASE SAVEPOINT 命令删除 SAVEPOINT,删除后的 SAVEPOINT,不能再执行 ROLLBACK TO SAVEPOINT 命令。
20180325_8
20180325_920180325_9

汤一碗博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论