Mysql数据库事务
首先说明什么是事务:所谓事务就是针对数据库的一组操作。
事务的基本特性:1.原子性 2.一致性 3.隔离性 4.持久性
原子性:是指一个事务必须视为不可分割的最小单元,事务的操作要么全部成功,要么全部失败。
一致性:是指事务将数据库从一种状态转变为下一种一致的状态。
隔离性:该特性也可以称作为并发控制,可串行行,锁,主要是数据库在进行并发访问的时候多个事务之间进行隔离不能相互影响。
持久性:事务一旦提交就会永远的保存在数据库中,不会因为外界的原因发生任何改变。(除了一些不可逆的因素:如磁盘损坏等。。。)
事务的提交:
START TRANSACTION
UPDATE test SET money=200 WHERE id=1;
UPDATE test SET money=400 WHERE id =4;
COMMIT;
当开启事务后,如果在执行语句的过程中,某个语句并没有执行成功,则全部返回至未执行以前的状态。
事务的回滚:
如果在某时发现对事务的操作并不合理,在未提交事务的情况下可以将此事务进行回滚,取消当前的事务,回到起始状态。
START TRANSACTION;
UPDATE test SET money=100 WHERE id=1;
UPDATE test SET money=100 WHERE id =2;
ROLLBACK;
COMMIT;
在日常数据库的访问过程种,数据库的并发访问情况经常发生,很容易出现脏读,幻读,重复读等问题。为了防止这一切的发生,需要对事务设置隔离级别,目前事务的主要隔离级别又4种,他们分别是:读未提交,读提交,可重复度,可串行化
读未提交:事务中的最低隔离级别,在实际开发中并不能防止任何问题,很少使用。
读提交:能有效防止脏读,是目前的大部分数据库拥有的隔离级别。
可重复度:mysql的默认隔离级别,能有效地防止脏读,不可重复读。由于mysql的引擎能有效控制幻读,因此该隔离级别也是并发安全的。
可串行化:最高的隔离级别,强制对事务进行排序,但是此级别会较大程度影响数据库的效率,因此在开发过程中很少使用。