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回复丢失部分数据。