一、事物的简介
1.事物的概念
事物是一个操作序列,该序列中的多个操作要么都做,要么都不做
是MySQL5.5之后的存储引擎所支持
2.事物的特点
a.原子性
原子是自然界中最小的颗粒,具有不可再分的特点
事物中的所有操作可以看作是一个原子,要么全部执行,要么全不执行
b.一致性
事物执行的结果必须要保证数据库中数据的一致性
c.隔离性
隔离性指各个事物的操作是互不干扰的,任意一个事物的内部操作都对其他并发的事物都不能进行干扰
d.持久性
指事物一旦提交后,对数据库中数据做出的任何改变都会永久保存
二.事物的控制
1.开启事物
语法:start transaction |begin 开启一个新的事物
(1).创建一个库test5
(2).创建一张表account(id账号主键唯一,username账号名,balance金额)
(3).插入数据
例如:开启新事物,完成张三给李四转账200
start transaction;
update account set balance=balance-200 where username='张三';
update account set balance=balance+200 where username='李四';
注意:使用start transaction 开启一个新事物后,该事物就不会自动提交,必须手动提交
2.提交事物
语法:commit;
例如:开启新事物,完成张三给李四转账200,提交事物
start transaction;
update account set balance=balance-200 where username='张三';
update account set balance=balance+200 where username='李四';
commit;
3.事物回滚
语法:rollback;
注意:开启的事物,未提交时候可以回滚
例如:回滚事物
start transaction;
update account set balance=balance-200 where username='张三';
update account set balance=balance+200 where username='李四';
rollback;
读取其他事务未提交的数据也称为脏读(DIRTY READ) 。 我们可以这样来理解脏读:
A 事务在更新一条记录, 但尚未提交前, B 事务读到了 A 事务更新后的记录, 那么 B 事务
会产生对 A 事务未提交数据的依赖。 一旦 A 事务回滚, 那么 B 事务读到的数据, 将是错误
的脏数据。
三.事物的隔离级别
事物的隔离级别用于决定如何控制并发用户读写数据的操作
事物的隔离级别由低到高分为:
1.read uncommitted
指读取未提交的数据内容
2.read committed
指读取提交的数据,该隔离级别下,所有事物只能看到其他事物已经提交的数据。该隔离级别解决了脏读的问题。
3.repeatable read
指(可重复读)是MySQL默认的隔离级别
4.serializable
指(可串行化)该隔离级别是最高的,同时花费也是最高的,性能最低,一般很少用
因为在该隔离级别下,事物按着顺序执行