一、事务
MySQL事务主要处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。
二、事务四大特性
事务的四大特性,简称ACID
原子性(Atomicity)
事务中包含的逻辑不可分割,对于数据修改,要么全部执行,要么全部不执行
一致性(Consistency)
事务执行前后,数据的完整性能保持一致,写入的资料必须完全符合所有的预设规则
隔离性(Isolation)
事务在执行期间,不应受到其他事务的影响。比如多个用户并发访问数据库的同一张表,数据库为每一个用户开启的事务,不被其他事务所干扰,多个并发事务之间需要相互隔离
持久性(Durability)
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
三、事务的安全隐患
需要先了解事务的隔离级别,隔离级别分为以下4种:
隔离级别:
- TRANSACTION_READ_UNCOMMITTED 读未提交
- TRANSACTION_READ_COMMITTED 读已提交
- TRANSACTION_REPEATABLE_READ 可重复读
- TRANSACTION_SERIALIZABLE 串行化
查看当前事务的隔离级别:
select @@tx_isolation;
MySQL默认为可重复读
设置当前事务级别:
set session transaction isolation level read uncommitted;
安全问题:
1.脏读(Dirty Read)
脏读(Dirty Read)** — 一个事务读到了另外一个事务还未提交的数据
2.不可重复读
不可重复读(Nonrepeatable Read)—在同一事务中,两次读取的数据内容不一致
3.幻读
幻读(phantom read)—一个事务的操作导致另一个事务前后两次查询的结果数据量不同
隔离级别可以做到的安全隐患:
TRANSACTION_READ_UNCOMMITTED 允许脏读、不可重复读和幻读。
TRANSACTION_READ_COMMITTED 禁止脏读,但允许不可重复读和幻读。
TRANSACTION_REPEATABLE_READ 禁止脏读和不可重复读,单运行幻读。
TRANSACTION_SERIALIZABLE 禁止脏读、不可重复读和幻读。