并不是所有的数据库引擎都是支持事务的,如 MyISAM 就不支持,InnoDB 就支持,我们的是InnoDB
show variables like '%storage_engine%'; 查看当前数据库的默认引擎是什么
事务的基本要素(A-原子性C-一致性I-隔离性D-持久性)
我们在处理事务的时候会遇到的状况:
脏读:A读取了 B操作还未提交事务的结果,脏数据(B一旦提交事务,这个结果就不准确了)
不可重复读:A在某段时间,查询到的数据不一样(B提交事务,可能在不停的修改数据)--->针对单条数据
幻读:主要针对一批数据来讲,A查询的一批数据,可能被B在不停的修改,出现幻觉了?
mysql的事务隔离级别:
Serializable串行:我的事务尚未提交,别人就都给我等着,谁也不准动。
Repeatable read可重复读:别人改数据的事务已经提交,不管你做了什么,我只认我第一次读到的数据。
Read committed读已提交:别人改数据的事务已经提交,只有别人的操作完提交了事务,我才能去读你的数据。
Read uncommitted 读未提交:别人改数据的事务尚未提交,只要任何人做了修改,不管是否提交事务,我都能读。
这 4 种隔离级别,并行性能依次提高,安全性依次降低
查询当前的事务隔离级别是什么:select @@tx_isolation;
设置mysql的隔离级别:set session transaction isolation level 设置事务隔离级别