深入浅出Mysql——事务控制和锁定语句

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

原文地址:https://www.cnblogs.com/Edword-ty/p/11000708.html

时间: 2024-08-29 06:29:29

深入浅出Mysql——事务控制和锁定语句的相关文章

14.Mysql事务控制和锁定

14.事务控制和锁定存储引擎和锁: MyISAM和MEMORY存储引擎的表支持表级锁: BDB存储引擎的表支持页级锁: InnoDB存储引擎的表支持行级锁.默认情况下,表锁和行锁都是根据执行的语句自动获得和释放,不需要额外处理.用户也可根据业务需要来手动添加和释放锁,以保证事务的完整性. 14.1 Lock table和Unlock tableLock table可以锁定用于当前线程的表.如果表被其他线程锁定,则当前线程会等待,直到可以获取所需的锁定为止.Unlock table可以释放当前线程

MySQL 事物控制和锁定语句

一.MySQL支持对MyISAM和MEMORY存储引擎的表进行表级锁定,对InnoDB存储引擎的表进行行集锁定.默认情况下是自动获得. 二.LOCK TABLES 可以用于锁定当前线程获得的表,如果表被其他线程锁定,当前线程一直等待到可以获取现有锁定为止. 三.UNLOCK TABLES 可以释放当前线程获得的任何锁定,当前线程执行另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐式地解锁. 四.start transaction 可以开启一个事务且commi

《深入浅出Mysql》——第十二章 存储过程和函数 + 第十三章 触发器 + 第十四章 事物控制和锁定语句

MySQL 从 5.0.2 版本开始支持触发器的功能.触发器是与表有关的数据库对象,在满足定义 条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端 确保数据的完整性. MySQL 从 5.0.3 开始支持分布式事务,当前分布式事务只支持 InnoDB 存储引擎.一个 分布式事务会涉及多个行动,这些行动本身是事务性的.所有行动都必须一起成功完成,或 者一起被回滚 分布式的关键在于如何确保分布式事务的完整性,以及在某个分支出现问题时的故障解 决. 原文地址:https:

《深入浅出MySQL数据库开发、优化于管理维护》基础篇学习笔记

MySQL数据库物理文件默认存放位置:C:\ProgramData\MySQL\MySQL Server 5.5\data\MySQL通过配置my.int的datadir属性来指定数据库的物理存放位置. 一.DDL语句:1.创建数据库:create database test; 2.删除数据库:drop database test; 3.描述表:desc emp; 4.删除表:drop table emp; 5.修改表:(1)修改表类型:alter table emp modify ename

Mysql锁机制和事务控制

如何加锁 锁定表的语法:    LOCK TABLES    tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}    [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...解锁语法:    UNLOCK TABLES innodb的存储引擎提供行级锁,支持共享锁和排他锁两种锁定模式,以及四种不同的隔离级别. 死锁 InnoDB自动检测事务的死锁,并回滚一个

php中对MYSQL操作之事务控制,回滚

<?php //事务控制,回滚 //创建一个mysqli对象 $mysqli = new MySQLi("主机名","mysql用户名","密码","数据库名"); //判断是否链接成功 if($mysqli->connect_error){ die($mysqli->connect_error); } //由于在事务提交中系统默认提交,故这里设置为FALSE先不提交 $mysqli->autocomm

MYSQL事务及存储引擎对比

Innodb支持事务,而myisam不支持事务. 事务的定义: 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据的更新从一个一致性状态变更为另一个一致性状态,这时有必要引入事务的概念. Mysql提供了多种引擎支持Innodb和BDB.Innodb存储引擎事务主要通过UNDO日志和REDO日志实现,Myisam和memory引擎则不支持事务.下图分别给出三种mysql引擎的区别和特性: Myisam存储引擎:由于该引擎不支持事务.也不支持外键,所以

JDBC事务控制

JDBC事务控制事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功.例如转账,一方多了,一方少了同时执行.mysql数据库默认事务是自动提交的,即一条SQL语句就是一个单独的事务,是自动提交的.Oracle数据库默认是事务不是自动提交的,没一句都需要手动提交事务,否则默认为都是同一个事务.对于多条sql放在同一个事务中需要使用事务命令start transaction 开启事务(所有增删改查都在临时表中进行) Rollback 回滚事务(取消操作) Commit 提交事

转载 深入浅出mysql事务处理和锁机制

1. 事务处理和并发性 1.1. 基础知识和相关概念 1 )全部的表类型都可以使用锁,但是只有 InnoDB 和 BDB 才有内置的事务功能. 2 )使用 begin 开始事务,使用 commit 结束事务,中间可以使用 rollback 回滚事务. 3 )在默认情况下, InnoDB 表支持一致读. SQL 标准中定义了 4 个隔离级别: read uncommited , read commited , repeatable read , serializable . read uncomm