MySQL中的事务
1. 事务的概念
组在数据库中执行的操作,必须要么全部成功执行,要么全部不执行
2. 事务的操作
-
通过设置事务的提交方式
// 查看/设置事务的提交方式 SELECT @@autocommint; SET @@autocommint=0; //提交事务 COMMIT; //回滚事务 ROLLBACK;
-
通过开启事务
//1. 开启事务 START TRANSACTION 或 BEGIN; //2. 提交事务 COMMIT; //3. 回滚事务 ROLLBACK;
3 .事务的四大特性(ACID)
- 原子性(atomicity):事务是不可分割的最小单元,要么执行成功,要么全部执行失败。
- 一致性(Consistency):事务完成时,必须使所有的数据保持一致状态。
- 隔离性(Isolation):数据库的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性(Durability):事务一旦提交或者回滚,那它对数据库中的数据改变就是永久的。
4. 并发事务引发的问题
- 脏读:一个实物读取到另一个实物还没有提交的数据。
- 不可重复度:一个事务读取同一条记录,但两次读取数据不同,称之为不可重复度。
- 幻读:一个实物按照条件查询数据时,没有对应的数据行,但是在插入时,又发现这行数据已经存在,好像出现可‘幻影’。
5. 事务的隔离级别
- Read uncommitted:没有解决并发并发带来的问题。
- Read committed:解决了脏读。
- Repeatable Read(mysql的默认隔离级别):解决的脏读和不可重复度的问题。
- Serializable:解决了三个问题,但是性能有所下降。
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {read committed|read committed|repeatable read|serializable}