事务的基本操作
开启一个事物
start transaction
创建一个保存点
savepoint 保存点名;
回到保存点
rollback to 保存点名;
事务操作注意事项
-
如果没有设置保存点,也可以回滚,只能回到事物的开始(直接使用rollback),但前提是事物必须没有提交
-
如果一个事务被提交了(commit),则不可以回退(rollback)
-
innoDB支持事务,MyISAM不支持
无隔离性的问题
脏读:一个事务正在访问数据,并且对事务进行了修改,而这种修改还没有提交到数据库中,这时,另一个事务也访问了这个数据,然后使用了该数据
不可重复读:在一个事务中,多次读一个数据,这个事务还没有结束的时候另一个事务也访问了该数据并且对其进行了修改,这样多次读该数据的事务所读到的两次数据则不相同
解决方法:避免修改事务未完成提交之前进行读取数据
幻读:事务不独立执行的时候发生的一种现象,第一个事务要修改所有的数据,第二个事务同时进行了插入数据,导致第一个事务在操作完成之后发现自己并没有完成修改所有的数据,像产生了幻觉一样
解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题
事务的隔离级别
事务的ACID特性
-
原子性(不可再分)
-
一致性(数据库从一个一致性变到另一个一致性)
-
隔离性(各个事务执行互不干扰)
-
持久性(事务一旦被提交将永久存储)