MySQL - [20] 事务
题记部分
一、什么是ACID
(1)Atomicity 原子性
某个操作,要么全部执行完毕,要么全部回滚。
(2)Consistency 一致性
数据库中的数据全都符合现实世界中的约束,则这些数据就符合一致性。
比如性别的约束男or女,人民币勉之不能为负数,出生地址不能为null,参与转账的账户总余额不变;等等。
(3)Isolation 隔离性
多个事务访问相同数据时,对该数据不同状态的转换对应的数据库操作的执行顺序有一定的规律,彼此不干涉。
(4)Durability 持久性
现实中的状态转换映射到数据库中,意味着对数据所作的修改都应该在磁盘中保存。
二、事务的状态有哪些
三、事务并发时数据一致性问题有哪些
四、脏读
如果一个事务读取到了另一个未提交事务修改过的数据,就意味着发生了脏读现象。
五、不可重复读
如果一个事务修改了另一个未提交事务读取的数据,就意味着发生了不可重复读现象,或者叫模糊读FuzzyRead
六、幻读
如果一个事务先根据某些搜索条件查询了一些记录,但是在记录该事务并未提交时,另一个事务写入了一些符合上面搜索条件的记录(这里的写入可以是insert、delete、update操作。)就意味着发生了幻读现象。
七、事务隔离级别
READ UNCOMMITED:最低的隔离级别,允许读取尚未提交的数据变更。可能导致脏读、不可重复读和幻读。
READ COMMITED:允许读取已经提交的数据。可以避免脏读,但不可重复读和幻读仍有可能发生。
REPEATABLE READ:MySQL默认的隔离级别,确保在同一个事务中多次读取同一个数据时,该数据不会被修改。但在事务进行过程中,其他事务的插入操作可能导致幻读。
SERIALIZABLE:最高的隔离级别,所有的事务都串行化执行,避免了脏读、不可重复读和幻读的问题,但是性能将会大幅下降。
八、隔离级别及事务重要参数查询和设置
(1)查询事务隔离级别:show variables like 'transaction_isolation';
(2)设置事务隔离级别为读提交:set session transaction isolation level read committed;
(3)设置事务隔离级别为可重复读:set session transaction isolation level repeatable read;
(4)查看是否自动提交事务:show variables like 'autocommit';
(5)设置非自动提交事务:set autocommit=0;
— 业精于勤荒于嬉,行成于思毁于随 —