Mysql支持对MyISAM进行表级锁定,对InnoDB存储引擎支持行级锁定。  

LOCK TABLES可以锁定用于当前线程的表,如果表被其他线程锁定,则当前线程会等待,直到可以获取所有锁定为止。

UNLOCK TBALES可以释放当前线程获得的任何锁定,当前线程执行另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含的解锁

 

 

START TRANSACTION或BEGIN语句可以开始一项新的事务

COMMIT和ROLLBACK用来提交或者回滚事务

CHAIN和RELEASE子句分别用来定义在事务提交或者回滚之后的操作,CHAIN会立即启动一个新事物,并且和刚才的事务具有相同的隔离级别,RELEASE则会断开和客户端的连接

SET AUTOCOMMIT可以修改当前连接的提交方式,如果设置了SET AUTOCOMMIT=0,则设置之后的所有事务都需要通过明确的命令进行提交或者回滚

 

如果在提交的时候使用COMMIT AND CHAIN,那么会在提交后立即开始一个新的事务(新事务不提交)。

 

分布式事务的使用:

XA START xid用于启动一个带给定xid值的XA事务(分布式事务)。

xid:gtrid,bqual,formatID

gtrid是一个分布式事务标识符,相同的分布式事务应该使用相同的gtrid,这样可以明确知道XA事务属于哪个分布式事务

bqual是一个分支限定符,默认值为空串,对于一个分布式事务中的每个分支事务,bqual值必须是唯一的

formatID是一个数字,用于标识由gtrid和bqual值使用的格式,默认值是1

 

XA END xid

XA PREPARE xid

使事务进入PREPARE状态,也就是两阶段提交的第一个提交阶段。

XA COMMIT xid

XA ROLLBACK xid

这两个命令用来提交或者回滚具体的事务,也就是两阶段提交的第二个提交阶段,分支事务被实际地提交或者回滚。

XA RECOVER 

XA RECOVER返回当前数据库中处于PREPARE状态的分支事务的详细信息。

 

如果分支事务在达到prepare状态时,数据库异常重新启动,服务器重新启动以后,可以继续对分支事务进行提交或者回滚操作,但是提交的事务没有写binlog,存在一定隐患,可能导致使用binlog回复丢失部分数据。