事务
定义:事务是一堆操作的集合,在操作时,一般一齐提交给系统进行处理,所以这些操作一般会一起成功或者一起失败 如果中途失败的话,就要进行事务的回滚,一般事务会默认自动提交
事务操作
查看事务提交方式
sql
select @@autocommit;默认提交方式是1:自动提交 0:手动提交
提交事务
commit;
回滚事务
rollback;
四大特性(ACID)
原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败 如果执行结果不一致,就会导致数据不一致,数据库的数据就会出错 一致性:事务完成时,必须使所有数据保持一致状态 隔离性:数据库系统提供隔离特性,保证事务不受外部并发操作影响的独立环境执行 持久性:事务一旦提交或者回滚,对数据库的数据的改变就是永久的
并发事务问题:
数据库涉及数据的修改还有操作的并发,就会产生一些常见问题,常见的:脏读,不可重复读,幻读 脏读:一个事务读取到另外一个事务没有提交的数据 不可重复读:一个事务先后读取同一条记录,但读取到的数据不相同 幻读:一个事务在读取一行数据时,数据不存在,但是插入时,数据又存在了
事务的隔离级别:
为了防止并发产生的问题,MYSQL设计了一系列的隔离等级 越安全的隔离方式,性能越低
| 事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| read uncommitted | 1 | 1 | 1 |
| reda committed | 0 | 1 | 1 |
| repeatable read(默认) | 0 | 0 | 0 |
| serializable | 0 | 0 | 0 |
0代表不会发生
Repeatable Read:可重复读
确保了在同一事务中多次读取相同记录的结果是一致的。 可以通过在读取记录时对其加锁来实现的,一旦某个事务读取了某条记录,那么在该事务完成之前,其他事务是无法修改该记录的。 Mysql使用了MVCC来实现这个操作,数据在被读取时会被创建一个快照,当这个事务中的其他读取操作进行时,只能读取到当前快 照的数据,从而保证了可重复读的特性,又不会导致阻塞
查看事务隔离级别
sql
select @@transaction_isolation;修改事务的隔离级别
sql
set 范围 transaction isolation level {read uncommitted , reda committed , repeatable read , serializable} ;范围:session 设置当前会话窗口 global 对全部的会话窗口有效