概念
一个或一组sql语句组成一个执行单元,要么全部执行,要么全部不执行
经典案例
银行转账,一方余额减少,一方余额增加,这两个操作必须同时成功
存储引擎
概述
1.在mysql中的数据用各种不同的技术存储在文件(或内存)中。
2.通过show engines,来查看mysql支持的存储引擎
3.mysql中用的最多的有:innodb,myisam,memory,其中innodb支持事务,而myisam,memory等不支持事务、
ACID属性
- 原子性
原子性是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生 - 一致性
事务必须使数据库从一个一致性状态变换到另一个一致性状态 - 隔离性
一个事务的执行不能被其他事务干扰 - 持久性
一个事务一旦被提交,这就是永久性的改变
事务分类
-
隐式事务
没有明显的开启和结束的标记,比如一条insert,delete -
显式事务
事务具有明显的开始和结束,必须先设置自动提交功能为禁用
/*关闭自动提交*/
set autocommit = 0
/*开启事务*/
start TRANSACTION
/*
编写sql语句(select insert update delete)
*/
/*结束事务*/
commit;# 提交
ROLLBACK;# 回滚
注:alter等对表的操作不支持事务,事务只支持TCL语言
事务的隔离级别
查看隔离级别
Read Uncommitted
读未提交
当事务还没有提交时,却在另一个查询中就查到数据已经更改了发生了脏读
Read committed
读已提交
不存在脏读了,但存在不可重复读,同一个事务多次查询,得到的结果不一样就是不可重复读。
描述第一个线程(事务),更改之后还没有提交,第二个线程(事务)查得的数据是未修改之前的,当第一个线程提交之后,第二个线程查得的是修改之后的