11. TCL-事务控制

       本小节我们开始学习数据库中非常重要的概念——事务,包括事务的概念、事务的组成、事务的控制、事务的特性。

1. 事务概念

        事务:英文单词Transaction,是由一个或多个SQL语句所组成的操作集合,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。

        在数据库中,通过事务来保证数据的一致性。比如:下面两条SQL语句模拟银行账户转账,对每个账户分别涉及到金额更新的操作,这两条操作只允许全部成功或全部失败,否则就会出现数据错误的现象。

update account set money = money - 500 where id=1;
update account set money = money + 500 where id=2;

2. 事务组成

        在数据库中,事务由:

                一组相关的DML,加上:

                若干DQL语句(SELECT),再加上

                一个TCL语句(COMMIT、ROLLBACK)

                一个DDL语句(CREATE、ALTER、DROP、TRUNCATE等)

                一个DCL语句(GRANT、REVOKE)组成。

        例:如下SQL语句组成两个事务。

                insert...

                update...

                delete...

                select...

                insert...

                commit...;---前六条语句,组成一个事务

                update...

                delete...

                creat...;---后三条语句,组成第二个事务

3. 事务控制

3.1 事务控制语言

        事务控制语言,Transaction Control Language,简称TCL,主要用来对组成事务的DML语句的操作结果进行确认或取消。

        确认:也叫提交,使组成该事务的所有DML语句操作生效,使用COMMIT关键字实现。

        取消:也叫回滚,使组成该事务的所有DML语句操作不生效,使用ROLLBACK关键字实现。

        所有SQL操作都涉及到事务控制,默认情况下,在MySQL数据库中,事务被设置成自动提交状态,每执行一条SQL执行后MySQL就帮我们自动提交事务,因此如果想要手动控制事务,就必须通过如下命令关闭MySQL的事务自动提交。

                SET autocommit = 0; -- 0设置手动提交,1设置自动提交

        这样就可以手动来控制事务是提交或者回滚了。在实际开发工作中,事务是一个非常重要的概念,一般情况下不会设置成自动提交。

        也可以通过如下命令,来查看当前是否自动提交

                show variables like 'autocommit';

3.2 事务结束方式

        事务结束有两种状态,分别是提交和回滚。同时有两种方式控制事务的结束,一种是显示方式,一种是隐式方式,具体见下表。

事务结束方式

显示

隐式

提交

COMMIT;

执行一个DDL或者DCL语句

回滚

ROLLBACK;

发生异常情况,如断网断电等。

3.3 事务开启方式

        事务开启也有两种方式,如下:

                方式1:上一个事务结束后,遇到的第一条DML语句,事务自动开启。

                例: ...

                        commit; --事务显示提交,当前事务结束

                        select .....;

                        insert into....; --上一个事务结束后,遇到的第一个DML,自动开启

                        update....;

                        delete....;

                        select....;

                        insert....;

                        create; --事务隐式提交,当前事务结束;

                        update....; --上一个事务结束后,遇到的第一个DML,自动开启

                        delete..;

                        rollbake; --事务显示回滚,当前事务结束

        方式2:通过begin 或 start transaction 开启事务。

        例:执行如下SQL语句,观察执行结果

start transaction		--开启事务
insert into dept(deptno,dname,loc) 
values(18, 'dept1','loc1');
select * 
from dept;
--如上SQL执行完毕后,可以看到部门表中新插入一条编号为18的记录。
--继续执行如下SQL
rollback;
select * 
from dept;

4. 事务特征

        事务的特征可用四个字母的缩写表示:即ACID

                原子性(Atomicity)

                        事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。

                一致性(Consistency)

                        一旦事务完成,不管是成功的,还是失败的,整个系统应处于数据一致的状态。

                隔离性(Isolation)

                        一个事务的执行不会被另一个事务所干扰。

                持久性(Durability)

                        也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

记乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值