1.事物的概念
事物是一个操作序列,该序列要么执行全部要么就不执行,是MySQL5.5之后的存储引擎所支持
2.事物的特点
a.原子性
原子是自然界中最小的颗粒,具有不可再分的特点
事物中的所有操作可以看作是一个原子,要么全部执行,要么全不执行
b.一致性
事物执行的结果必须要保证数据库中数据的一致性
c.隔离性
隔离性指各个事物的操作是互不干扰的,任意一个事物的内部操作都对其他并发的事物都不能进行干扰
d.持久性
指事物一旦提交后,对数据库中数据做出的任何改变都会永久保存
2.事物的控制
1.开启事物
语法:start transaction |begin 开启一个新的事物
2.提交事物
语法:commit;
例如;
start transaction;
update account set balance=balance-200 where name='张三';
update account set balance=balance+200 where name='李四';
commit / rollback
3.回滚事物
语法:rollback;
注意:开启的事物,未提交时候可以回滚
2.事物的隔离级别
事物的隔离级别用于决定如何控制并发用户读写数据的操作
事物的隔离级别由低到高分为:
1.read uncommitted 指:读取未提交的数据内容 查询开启事物但未提交情况
设置隔离:set session transaction isolation level read uncommitted;
查看事物隔离级别 :select @@transaction_isolation
开始事物,查询表中的数据,可以查询到未提交的数据 start transaction select * from 表名;
缺点是 若查询的事物执行回滚 也会显示 造成数据脏读
2.read committed 指:读取提交的数据, 所有事物只能看到其他事物已经提交的数据
该隔离级别解决了脏读的问题
设置方法同上不做详解,但是会出现数据读取数据不同,第一次读取时未提交,第二次读取提交后数据。
3.repeatable read 指:(可重复读)是MySQL默认的隔离级别 解决了两次读取数据不同的问题 推荐使用
MySQL中InnoDB存储引擎 使用(MVCC机制)解决了repeatable read 下的幻读问题
幻读就是查询事物可以读到正在执行插入操作的事物。
4.serializable 该隔离级别是最高,性能最低,一般很少用
在该隔离级别下,事物按着顺序执行,效率降低。