标签:ack 语句 出现 设计 事务控制 删除 事务性 文件 开始
从表种看出,只有InnoDB和BDB引擎是事务安全表,其它引擎是非事务安全表。在创建表时不指定引擎时,默认会是 InnoDB 引擎。
SHOW ENGINES;
默认情况下,表锁和行锁是自动获取的,不需要额外的命令。但有的情况下,用户需 UN要明确的进行锁表或者进行事务的控制以便保证整个事务的完整性。这样就需要使用事务控制和锁定语句来完成。
一、LOCK TABLES 和UNLOCK TABLE
lock tables 命令是为当前线程锁定表。这里有2种类型的锁定:
一种是读锁定,用命令 lock tables tablename read;
另外一种是写锁定,用命令lock tables tablename write.
1. lock table 读锁定
如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。
2. lock table 写锁定
如果一个线程在一个表上得到一个 WRITE 锁,那么只有拥有这个锁的线程可以从表中读取和写表。其它的线程被阻塞。
写锁定的命令:lock tables user write.
二、事务控制
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}
START TRANSACTION 或 BEGIN 语句可以开始一项新的事务。
COMMIT 和 ROLLBACK 用来提交或者回滚事务
CHAIN 和 RELEASE 子句分别用来定义在事务提交或者回滚之后的操作,CHAIN 会立即启动一个新事物,并且和刚才的事务具有相同的隔离级别,RELEASE 则会断开和客户端的连接。
SET AUTOCOMMIT 可以修改当前连接的提交方式,如果设置了 SET AUTOCOMMIT = 0 ,则设置之后的所有事务都需要通过明确地命令进行提交或者回滚。
分布式事务
资源管理器(RM)用于提供通向事务资源的途径。数据库服务器是一种资源管理器,该管理器必须可以提交或回滚由 RM 管理的事务。例如,多台 MySQL 数据库作为多台资源管理器或者几台 MySQL 服务器和几台 Oracle 服务器作为资源管理器。
事务管理器(TM)用于协调作为一个分布式事务一部分的事务。TM 与管理每个事务的 RMs 进行通信。在一个分布式事务中,各个单个事务均是分布式事物的“分支事务”。分布式事务和各分支通过一种命名方法进行标识。
在第一阶段,所有的分支被预备好。即他们被 TM 告知要准备提交。通常,这意味着用于管理分支的每个 RM 会记录对于被稳定保存的分支的行动。分支指示是否他们可以这么做。这些结果被用于第二阶段。
在第二阶段,TM 告知 RMs 是否要提交或回滚。如果在预备分支时,所有的分支指示他们能够提交,则所有的分支被告知要提交。如果在预备时,有任何分支指示它将不能提交,则所有的分支被回滚。
标签:ack 语句 出现 设计 事务控制 删除 事务性 文件 开始
原文地址:https://www.cnblogs.com/ljg3020/p/14906496.html