概述
事务是由单独单元的一个或多个 SQL 语句组成,在这个单元中,每个 SQL 语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中的某条 SQL 语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事务开始之前的状态;如果单元中的所有 SQL 语句都执行成功,则事务执行成功。
总结:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
关键词:子任务的集合,一致性,要么成功,要么失败
事务的原理
● 事务开启之后,所有的操作都会临时保存在事务日志中,事务日志只有在得到 commit 命令才会同步到数据库中,其他的任何情况都会清空事务日志( rollback ,断开连接)。
● MySQL 没有开启事务的情况(默认情况下,MySQL 中的事务是默认自动提交的)
● MySQL 手动开启事务的情况:
事务的使用场景
● 如果在某个业务中需要执行多条 SQL 语句(写),那么此时一般是需要使用事务,从而保证这多条 SQL 语句执行同时成功或失败。
● 例如:转账、批量删除、从购物车中提交订单等等
事务的特性(ACID)
● 原子性(Atomicity):原子性是指事务是一个不可分割的整体,事务中的操作要么全部成功,要么全部失败。
● 一致性(Consistency):事务必须使得数据库从一个一致性的状态转移到另一个一致性的状态。比如:张三有余额 3000,李四有余额 2000,张三向李四转账 500,此时张三的余额是 2500,李四的余额是 2500,在这个过程中余额的总数 5000 是不变的。
● 隔离型(Isolation):事务的隔离性是指一个事务的执行不能被其它事务所干扰,即一个事务内存的操作及使用的数据对并发中的其它事务是隔离的,并发执行的各个事务之间不能互相干扰。
● 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中的数据的改变就是永久性的,接下来的其它操作和数据库故障不应该对其有任何影响。
事务的创建
START TRANSACTION;
command 1,2,3......
......
COMMIT[ROLLBACK];
事务自动创建和手工创建
SHOW VARIABLES LIKE '%autocommit%';
select @@autocommit;
// 1 表示事务开始自动提交 0表示不自动提交,需要commit or rollback
// mysql 默认事务是自动提交,即每执行一个sql语句,就提交一次。
// 关闭隐式事务
SET autocommit = 0;
隔离级别
-- 查看当前事务的隔离级别
SELECT @@tx_isolation;
--设置当前 MySQL 连接的隔离级别:
SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE];
--设置数据库系统的全局隔离级别:
SET GLOBAL TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE];
参考
MySQL超完整教程,MySQL入门到进阶全套教程,B站必学的mysql数据库教程