【MySQL进阶之路】什么是事务以及事务的操作

目录

什么是事务

事务的属性

事务的操作

查看数据库引擎

事务提交

开始一个事务

提交事务

创建一个保存点

回滚到保存点

结论

注意事项


个人主页:东洛的克莱斯韦克-CSDN博客

什么是事务

事务是由一条或多条DML语句构成的。其中多条DML语句的执行必须有两种状体——符合预期的完成对记录的增删改查操作不执行操作

虽然DML语句的执行是有过程性的,但如果多条DML语句在MySQL服务的技术支持下,能表现出原子性,这一组DML就是事务,反过来说事务是具有原子性的——事务可以进行回滚,如果事务的操作异常中断,MySQL服务可以让数据进行回滚,从而保证事务操作的原子性。

事务对应的一组DML语句在上层业务逻辑中不能是毫无意义的。

MySQL服务可能会收到大量事务请求,事务与事务之间如果在访问同样的数据,在不加保护的情况下会引发并发问题,所以事务绝对不是简单的SQL语句的集合。

事务的属性

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中 间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个 事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完 全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工 作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务 并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化 ( Serializable )
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

原子性是由回滚保证的。隔离性也有技术支持和相关策略。持久性就是数据的落盘(磁盘)行为。而一致性就是上述三者的体现,并没有具体技术的支持。

上面四个属性,可以简称为 ACID

原子性(Atomicity,或称不可分割性)

一致性(Consistency)

隔离性(Isolation,又称独立性)

持久性(Durability)。

事务的操作

查看数据库引擎

show engines \G
Engine -- 引擎名称
Support -- 默认引擎
Transactions -- 是否支持事务
Savepoints --是否支持事务保存点

事务提交

事务的提交方式常见的有两种: 自动提交 手动提交

查看事务提交方式

 show variables like 'autocommit';

用 SET 来改变 MySQL 的自动提交模式:

SET AUTOCOMMIT=0; #禁止自动提交

 SET AUTOCOMMIT=1; #开启自动提交

开始一个事务

 start transaction; 
begin;

begin操作会自动更改提交方式,不会受MySQL是否自动提交影响

提交事务

commit;

创建一个保存点

savepoint 保存点名

回滚到保存点

rollback to 保存点名
rollback; #直接rollback,回滚在最开始

结论

只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是 否设置set autocommit无关。

事务可以手动回滚,同时,当操作异常,MySQL会自动回滚 对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交。(select有特殊情况,因为 MySQL 有 MVCC )

注意事项

如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用 rollback(前提是事务 还没有提交)

如果一个事务被提交了(commit),则不可以回退(rollback)

可以选择回退到哪个保存点

 InnoDB 支持事务, MyISAM 不支持事务

开始事务可以使 start transaction 或者 begin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值