TCL事务控制语言

commit语句,rollback语句

事务的定义

一个事务是一个完整的逻辑单元,不可再分

比如,银行账户转账,从A账户向B账户转账10000,需要执行两条update语句:

​ update t_act set blance = blance -10000 where actno = ‘act-001’

​ update t_act set blance = blance +10000 where actno = ‘act-002’

以上两条DML语句必须同成功,或者同时失败,不允许出现一条成功,一条失败

要想保证以上的两条DML语句同时成功或者失败,那么就需要使用数据库的”事务机制“

事务相关语句

DML唯一与事务相关(insert delete update)

DML的三个语句都是和数据库表当中的“数据“相关的

事务的存在是为了保证数据的完整性,安全性

事务的使用

# 开启事务
set autocommit=0;
start transaction;

# 编写事务的语句
update account set balance = 1000 where username='张无忌';
update account set balance = 1000 where username='赵敏';

# 结束事务
commit;

事务的四大特性

  • A 原子性:事务是最小的工作单元,不可再分

  • C 一致性:事务必须保证多条DML语句同时成功或者同时失败

  • I 隔离性:事务A与事务B之间具有隔离

  • D 持久性:持久性说的是最终段数据必须持久化到硬盘文件中,事务才算成功的结束

并发问题

  • 脏读:一般是更新数据,一个事务处理过程里读取了另一个未提交的事务中的数据
  • 不可重复读:同一个事务前后两次读取获得的数据不一致
  • 幻读:一般是插入数据或者删除,在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,导致一个事务的读取结果不能支撑后续操作实现

隔离级别

事务的隔离性存在隔离级别,理论上隔离级别有4个

  1. 第一级别:读未提交

    对方事务还没提交,我们当前事务可以读取对方未提交的数据

    读未提交存在脏读的现象,即读到了脏的数据

    三个并发问题都不会被解决

  2. 第二级别:读已提交

    对方事务提交之后的数据我方可以读到

    解决脏读

    事务B第一次查询一个表时,获得一个数据,事务A对表进行操作,修改表内容,并提交事务A,事务B再次查询表,获得与第一次查询不同的数据,产生幻读

  3. 第三级别:可重复读

    确保事务可以从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新

    解决脏读和不可重复读

    事务A对一个表进行修改,修改运行了没提交,事务B对表进行查询,得到的时最初的,事务B没有提交,事务A提交,事务B再次对表进行查询得到的依然是最初的,事务B提交,之后再查询表,就是修改后的

  4. 第四级别:序列化读/串行化读

    禁止其他事务对该表执行插入,更新和删除操作

    效率低,解决所有问题

# 设置隔离级别

# 读未提交
set session transaction isolation level read uncommitted;

# 读已提交
set session transaction isolation level read committed;

# 可重复读
set session transaction isolation level repeatable read;

# 序列化/串行化
 set session transaction isolation level serializable;
 
 # 查看当前隔离级别
 select @@transaction_isolation;

回滚

set autocommit =0;
start transaction;
delete from account where id =6;
savepoint a;# 设置保存点
delete from account where id =9;
rollback to a;

结果是删除了id=6的一行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值