mysql--事务
来源:互联网 发布:ic卡读写器单片机 编辑:程序博客网 时间:2024/06/14 15:28
事务
特点
事务需要满足ACID四个特性。A(atomicity) 原子性。一个事务的执行被视为一个不可分割的最小单元。事务里面的操作,要么全部成功执行,要么全部失败回滚,不可以只执行其中的一部分。C(consistency) 一致性。一个事务的执行不应该破坏数据库的完整性约束。如果上述例子中第2个操作执行后系统崩溃,保证A和B的金钱总计是不会变的。I(isolation) 隔离性。通常来说,事务之间的行为不应该互相影响。然而实际情况中,事务相互影响的程度受到隔离级别的影响。文章后面会详述。D(durability) 持久性。事务提交之后,需要将提交的事务持久化到磁盘。即使系统崩溃,提交的数据也不应该丢失。
隔离级别
事务的四种隔离级别1.READ UNCOMMITTED(未提交读)。在RU的隔离级别下,事务A对数据做的修改,即使没有提交,对于事务B来说也是可见的,这种问题叫脏读。这是隔离程度较低的一种隔离级别,在实际运用中会引起很多问题,因此一般不常用。2.READ COMMITTED(提交读)。在RC的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见,举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,会读到最新的数据2。在RC的隔离级别下,会出现不可重复读的问题。这个隔离级别是许多数据库的默认隔离级别。3.REPEATABLE READ(可重复读)。在RR的隔离级别下,不会出现不可重复读的问题。事务A对数据做的修改,提交之后,对于先于事务A开启的事务是不可见的。举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,仍然只能读到1。在RR的隔离级别下,会出现幻读的问题。幻读的意思是,当某个事务在读取某个范围内的值的时候,另外一个事务在这个范围内插入了新记录,那么之前的事务再次读取这个范围的值,会读取到新插入的数据。Mysql默认的隔离级别是RR,然而mysql的innoDB引擎间隙锁成功解决了幻读的问题。4.SERIALIZABLE(可串行化)。可串行化是最高的隔离级别。这种隔离级别强制要求所有事物串行执行,在这种隔离级别下,读取的每行数据都加锁,会导致大量的锁征用问题,性能最差。
#
嵌套事务
Mysql是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务。在spring的托管中?
事务实现原理
原子性、一致性、持久性通过数据库的redo log和undo log来完成。隔离性通过锁来实现。
实现原子性、一致性、持久性
原理
Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。
实现隔离性
事务控制命令
如果需要使用事务就必须选用支持事务的数据库引擎如InnoDB和Falcon,MyISAM并不支持事务。
手动控制事务
在默认情况下MySQL开启的是autocommit模式,也就是隐含的将每条语句当做一个事务处理,每条SQL都会被自动提交。
手动控制事务可以有如下两种方法:
BEGIN; //开始事务,挂起自动提交insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10001, 1, 10001, 0);insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10002, 1, 10001, 0);COMMIT; //提交事务,恢复自动提交
set autocommit = 0; //挂起自动提交insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10001, 1, 10001, 0);insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10002, 1, 10001, 0);COMMIT; //提交事务set autocommit = 1; //恢复自动提交
回滚
#
阅读全文
0 0
- mysql事务是事务
- mysql 事务
- mysql 事务
- mysql事务
- Mysql 事务
- mysql事务
- mysql事务
- mysql 事务
- mysql事务
- mysql 事务
- mysql事务
- MySQL事务
- mysql---事务
- MySQL事务
- Mysql事务
- mysql事务
- mysql-事务
- Mysql事务
- Java反射之获取类的标识符
- maven deploy指定版本号
- QTP/UFT能捕捉到对象但是点击不了,录制点击也没反应
- 设计模式--备忘录模式
- python更新已经存在的excel 表内容
- mysql--事务
- input标签之外是否一定添加form标签
- [Leetcode] Populating Next Right Pointers in Each Node 二叉树Next指针
- org.json.JSONException: No value for api_data_ver
- Windows开发设置ASPNETCORE环境变量
- HDR到底是什么?今天我们来把它说个透
- 阿里巴巴Java开发手册学习小结4-关于集合处理
- 关于android studio Gradle报错
- jquery 常用选择器