事务用于保证数据的一致性,由一组相关的dml语句组成,该组的dml语句要么全部成功后提交,要么全部失败。进行一个事物操作时,也可以防止其它用户修改表的数据。
举个例子:转账这个操作需要在数据库中先给转载方扣去一定金额,再给收款方增加一定金额,这两个操作是关联的,它们必须都成功,否则转账就出现了问题。
事务的基本操作
注意:表的存储引擎为InnoDB才可以使用事务操作。
START TRANSACTION;
语法:SAVEPOINT 保存点名称
SAVEPOINT point_a;
选择回退到保存点:ROLLBACK TO 保存点
回退到事务开始转台:ROLLBACK
ROLLBACK TO pointa;
一旦提交事务后,所有的操作将生效,其它在使用数据库的人将会看到你操作后表的结果,提交后不可以进行回退。
-- 提交 --
commit
事务隔离
当存在多个连接开启事务操作数据库时,数据库系统需要设置隔离级别以保证各个连接在获取数据时的准确性.如果没有设置事务隔离,将可能引发脏读,不可重复读,幻读等问题
隔离级别 脏读 不可重复读 幻读 加锁读 读未提交(READ UNCOMMITTED) 允许 允许 允许 不加锁 读已提交(READ COMMITTED) 禁止 允许 允许 不加锁 可重复读(REPEATABLE READ) 禁止 禁止 禁止 不加锁 可串行读(SERIALIZABLE) 禁止 禁止 禁止 加锁
加锁读后,必须等待其它事务提交后才进行读取。
查看隔离级别(MySQL8.0): SELECT @@TRANSACTION_ISOLATION
查看隔离级别(MySQL5.7): SELECT @@tx_ISOLATION
设置隔离级别: SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别
-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
说明:系统默认的隔离级别是可重复读,一般情况下不用修改隔离级别
原子性:事务是不可分割的一个单位,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性:事务处理结束后,对数据的修改就是永久的,
Original: https://www.cnblogs.com/yjh1024/p/16541479.html
Author: Nights_Watch
Title: MySQL事务
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621064/
转载文章受原作者版权保护。转载请注明原作者出处!