MYSQL_TCL语言的学习

TCL(事务控制)语言的学习

目录

  1. 事务的创建步骤
  2. 演示savepoint的影响
  3. 演示事务的使用步骤
  4. 事务的隔离级别

事务概念: 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

事务的属性(ACID):
原子性: 一个事务不可再分割,要么都执行,要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性: 一个事务的执行不受其他事务的干扰
持久性: 一个事物一旦提交,则会永久的改变数据库的数据

事务的创建
1、隐式事务:事务没有明显的开启和结束的标记
比如:insert update delete语句

2、显示事务:事务具有明显的开启和结束的标记
前提: 必须先设置自动提交功能为禁用
语法:

set autocommit=0; #(只针对当前事务,下次需要重新关闭事务)
show variables like 'autocommit';#查看事务是否开启(on为开启,off为关闭)
show engines;#查看存储引擎

事务的创建步骤:

步骤一:开启事务

set autocommit=0;#禁用自动提交
start transaction;#可选的

步骤二:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
语句3;

步骤三:结束事务

commit;#提交事务
rollback;#回滚事务
savepoint 节点名;#设置保存点

#演示savepoint的影响

set autocommit=0;
start transaction;
delete from account where id=25;
savepoint a;#设置保存点
delete from account where id=28;
rollback to a;#回滚到保存节点

结果: id=25的数据被删除,但id=28的数据没有被删除
注意: savepoint只能搭配rollback使用

#演示事务的使用步骤

#创建account表
drop table if exists account;
create table account(
		id int primary key auto_increment,
		username varchar(20),
		balance double
);
insert into account(username,balance) values('张无忌',1000),('赵敏',1000);

#1、开启事务
set autocommit=0;
start transaction;
#2、编写一组事务的语句
update account set balance=500 where username='张无忌';
update account set balance=500 where username='赵敏';
#3、结束事务
commit;

并发问题有哪些?
1、脏读: 一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
2、不可重复读: 一个事务多次读取,结果不一样
3、幻读: 一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据

如何解决并发问题?
通过设置隔离级别来解决并发问题

**

#事务的隔离级别**

read uncommitted(读未提交): 出现脏读、幻读、不可重复读
read committed(读已提交): 不出现脏读、但出现幻读和不可重复读
repeatable read(可重复读): 不出现脏读和不可重复读,但出现幻读
serializable(串行化): 不出现脏读、幻读、不可重复读(但效率较低

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

查看当前默认隔离级别

select @@tx_isolation;

设置隔离级别

set seesion|global transaction isolation level 加隔离级别;

delete和truncate在事务使用时的区别

#演示delete(事务删除,支持回滚)
set autocommit=0;
start transaction
delete from account;
rollback;
#演示truncate(事务删除,不支持回滚)
set autocommit=0;
start transaction;
truncate table account;
rollback;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值