MySQL回头看之——TCL

事务概念

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

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

UPDATE account SET money = money - 500 where id=1;
UPDATE account SET money = money + 500 where id=2;

事务组成

在数据库中,事务由:

一组相关的DML,加上:

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

一个TCL语句(COMMIT、ROLLBACK)

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

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

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

      • INSERT….
      • UPDATE….
      • DELETE….
      • SELECT….
      • INSERT…
      • COMMIT;-- 前6条语句,组成第1个事务
      • UPDATE…
      • DELETE….
      • CREATE… ;--后3条语句,组成第2个事务

事务控制

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 ..;

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

方式2:通过BEGIN 或 START TRANSACTION 开启事务。

事务特征(重点面试内容)

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

原子性(Atomicity)

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

一致性(Consistency)

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

隔离性(Isolation)

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

持久性(Durability)

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

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值