七、TCL(事务控制语言)

七、TCL(事务控制语言)

*TCL(transaction control language):事务控制语言 commit、rollback

事务是MySql服务器提供的一个管理对象,用于对当前表文件备份进行管理
事务四大特性(ACID)

  1. 原子性(Atomicity):要么成功要么失败
  2. 一致性(Consistency):一个事务执行的前后,数据库都必须处以一致性状态
  3. 隔离性(Isolation):并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰
  4. 持久性(Duration):事务一旦提交后,数据库中的数据必须被永久的保存下来

1、开启一个事务

-- 通知MySql服务器提供一个事务对象,这个事务对象会对接下来的所有操作产生的备份进行管理
start transaction;

2、commit

*提交修改的内容,永久保存

通知MySql服务器将本次操作中所有备份信息进行删除,称之为提交操作

INSERT INTO TEST20200630(testid, testdate, testmemo) VALUES (23, SYSDATE, 'cccc');
COMMIT;  -- 插入一条数据提交后即可永久保存

※※※注意:commit后不能回滚,但如果是du9i或以上版本可以使用flashback来找回原来的数据


3、rollback

*撤回没提交的内容

通知MySql服务器将本次操作中所有备份信息覆盖到表文件,以此来取消本次操作

DELETE FROM TEST20200630 WHERE testid=23;
ROLLBACK;  -- 误删一条数据后可以回滚,撤销之前的操作

在一个事务中,rollback和commit都代表结束一个事务。要么回滚,要么提交。他们是在一个等级上的命令。rollback可以写在commit之前,但是commit的数据就不能rollback了


4、事务并发问题

1、脏读 ( Dirty Read )

读取了未提交的脏数据(B心说我还妹提交呢,万一跑着跑着滚了呢)

2、不可重复读 ( Unrepeatableread )

一个事务内多次读同一个过程中被其他事务修改的数据(前面计算的时候读的10后面计算的时候变成20了)

3、幻读 ( Phantom Read )

一个事务内多次读同一个条件下过程中被其他事物插入或删除的数据(刚才读还3条呢,一眨眼100条了)

不可重复读和幻读区别:

不可重复读重点在修改

幻读重点在新增或删除


4、事务隔离级别

由低到高分别为:

  1. 读未提交( Read uncommitted)
  2. 读提交(Read committed)
  3. 重复读(Repeatable read)
  4. 序列化(Serializable)
隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable read××
Serializable×××

( ×代表没有这个问题,√ 代表存在这个问题 ,一般会使用 Repeatable read)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值