mysql事务

1.什么是事务
指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。简单的说,事务就是并发控制的单位,是用户定义的一个操作序列
2.四大特性
1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2.一致性(Consistency):在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账、火车购票。

3.隔离性(Isolation):多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

4.持久性(Durability):如果程序设法完成两个update操作,还没执行commit或rollback命令,服务器突然宕机了,那么事务会在服务器重新上线后被回滚。如果程序完成了事务,并发出了commit指令,还没有将变化持久到永久存储区(修改的数据还位于内存,但没有被刷新到磁盘),服务器就宕机了,那么服务器重启时数据库服务器必须重新应用事务的变化。

3.事务使用命令
开启事务:start transaction/begain/begain work;(三种均可)
事务结束:end transaction
提交事务:commit/commit work
回滚事务:rollback

提交操作(事务成功)

start transaction
DML语句
commit

mysql> start transaction;#手动开启事务
mysql> insert into t_user(name) values('three');
mysql> commit;#commit之后即可改变底层数据库数据
mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
|  1 | one  |
|  2 | two  |
|  3 | three|
--------------------- 

回滚操作(事务失败)

start transaction
DML语句
rollback

mysql> start transaction;
mysql> insert into t_user(name) values('four');
mysql> rollback;
mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
|  1 | one  |
|  2 | two  |
|  3 | three|
+----+------+
3 rows in set (0.00 sec)
--------------------- 

回滚到指定保存点
savepoint pointname;//设置保存点
rollback to savepoint pointname;//回滚到指定保存点

mysql> start transaction;
mysql> insert into t_user(name) values('four');
mysql> savepoint four_point;
mysql> insert into t_user(name) values('five');
mysql> rollback to savepoint four_point;
mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
|  1 | one|
|  2 | two  |
|  3 | three|
|  4 | four |
+----+------+
4 rows in set (0.00 sec)
--------------------- 

4.事务的四大特性--------隔离性

  1. 事务A和事务B之间具有一定的隔离性
  2. 隔离性有隔离级别(4个)
    1.读未提交:read uncommitted
    2.读已提交:read committed
    3.可重复读:repeatable read
    4.串行化:serializable

read uncommitted

- 事务A和事务B,事务A未提交的数据,事务B可以读取到
- 这里读取到的数据叫做“脏数据”
- 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

read committed

- 事务A和事务B,事务A提交的数据,事务B才能读取到
- 这种隔离级别高于读未提交
- 换句话说,对方事物提交之后的数据,我当前事物才能读取到
- 这种级别可以避免“脏数据”
- 这种隔离级别会导致“不可重复读取”
- Oracle默认隔离级别

repeatable read

- 事务A和事务B,事务A提交之后的数据,事务B读取不到
- 事务B是可重复读取数据
- 这种隔离级别高于读已提交
- 换句话说,对方提交之后的数据,我还是读取不到
- 这种隔离级别可以避免“不可重复读取”,达到可重复读取
- 比如1点和2点读到数据是同一个
- MySQL默认级别
- 虽然可以达到可重复读取,但是会导致“幻像读”

serializable

- 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
- 这种隔离级别很少使用,吞吐量太低,用户体验差
- 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值