MySQL学习记录 - 12-TCL(事务控制语言)

根据尚硅谷的视频教程学习MySQL,学习记录-12-TCL语言

TCL:Transaction Conrtol Language 事务控制语言
事务
一个或一组SQL语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。

如果事务中某条SQL语句执行失败或产生错误,整个单元将会回滚,所有受到影响的数据将返回到事务开始以前的状态;

举例:张三:1000元,李四:1000元,现:张三向赵四转账500元

update 账户表 set 张三的余额 = 500 where 账户名 = '张三'
update 账户表 set 李四的余额 = 1500 where 账户名 = '李四'

MySQL中的存储引擎

SHOW ENGINES;

在这里插入图片描述

mysql中有多种存储引擎,但并不是所有存储引擎都支持事务,比如:innoDB支持,而myisam, memory等不支持事务

事务的属性 - ACID

  1. 原子性(Atomicity)
    事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency)
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(举例:A转账给B,两者的总金额在转账前和转账后是不变的)
  3. 隔离性(Isolation)
    一个事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰。
  4. 持久性(Durability)
    事务一旦提交,对数据库中数据的改变是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

事务的创建
隐式事务:事务没有明显的开启和结束的标记,比如 insert、update、delete语句
显式事务:事务有明显的开启和结束的标记,前提必须先设置自动提交功能为禁用 set autocommit = 0

步骤一:开启事务

set autocommit = 0;
start transaction; 可选的

步骤二:编写事务中的SQL语句(select insert update delete)
步骤三:结束事务

commit; #提交事务
rollback; #回滚事务
savepoint 节点; #回滚点

演示:
事务开始前表数据:
在这里插入图片描述
01 开启事务

set autocommit = 0;
START TRANSACTION;

02 编写一组事务的语句 - 张三给李四转账500元

update account set balance = 500 where unsername = '张三';
update account set balance  =1500 where unsername = '李四';

03 结束事务

commit; #结束事务

执行结束事务的语句,结果为:
在这里插入图片描述
04 回滚

在上述结果的基础上调整事务的语句:
update account set balance = 1000 where username = '张三';
update account set balance  =1000 where username = '李四';
结束行为调整为:
rollback;#回滚

此时结果: 以上语句对于数据并没有最终提交。
在这里插入图片描述
05 设置回滚点

SET AUTOCOMMIT = 0;
start transaction;
delete from account where userid = 1;
savepoint a; #设置为回滚点
delete from account where userid =6;
rollback to a; #回滚到保存节点,那么savepoint后的语句不执行。

此时执行以上事务结果为:对应ID为6的数据没有被删除
在这里插入图片描述

数据库隔离级别
多个事务同时运行存在的问题:脏读、不可重复读、幻读

查看当前的隔离级别:SELECT @@tx_isolation;

read uncommitted: 脏读:√,幻读:√,不可重复读:√
read committed:脏读: ×,幻读:√,不可重复读:√
repeatable read:脏读:×,幻读:√,不可重复读:×
serializable:脏读:×,幻读:×,不可重复度:×

mysql中默认为第三个隔离级别:repeatable read
oracle中默认为第二个隔离级别:read committed

设置隔离级别:

set session | global transaction isolation level 隔离级别;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值