mysql 事务
mysql 事务
-
事务用于保证数据的一致性,它由一组相关的dml 【update, insert, delete】语句组成【要么全成功,要么全失败,🔒】;
-
在执行事务的时候,mysql会在表上加锁,防止其他用户改表;
start transaction -- 开始一个事务, set autocommit=off savepoint -- 保存点, 设置保存点 rollback to -- 保存点,退回事务 rollback -- 退回全部事务 commit -- 提交事务,所有操作生效,不能退回,自动删除该事务的所有保存点; -
当提交事务后【commit】,会自动删除该事务的所有保存点,结束事务,删除保存点,释放锁,数据生效,其他会话或连接将可以查看到事务变化后的新数据【隔离级别】;
-
事务注意事项:
- 默认情况下,dml操作是自动提交,不能rollback;
- 开始一个事务,rollback,默认退回事务开始的状态;
- 可以在一个事务中,创建多个保存点,savepoint;
- 在事务提交之前,可以退回,commit;
- 事务机制,需要innodb引擎;
-
事务隔离级别【锁的级别 】
-
多个连接开启各自事务操作数据时,数据库系统要负责隔离操作,以保证各个连接在获取修改数据时的准确性;
-
数据读取错误:
- 脏读:读取一个未提交的修改【数据还不确定】;
- 不可重复读:其他事务做了修改,删除,而导致每次反击结果不一样;
- 幻读:其他事务做了插入,导致返回结果不一样;
-
隔离级别
隔离级别 脏读 不可重复读 幻读 加锁读 读未提交(read uncommitted) √ √ √ 不加 能看到别人事务; 读已提交(read committed) × √ √ 不加 不能看到别人事务,但能看到提交后数据 可重复读(repeatable read) × × × 不加 别人提交后的也看不到 可串行化(serializable) × × × 加 在操作时,有别人在操作,会等待别人提交后操作; -- 查看当前会话隔离级别 SELECT @@tx_isolation; -- 查看系统当前隔离级别; selsct @@global.tx_isolation; -- 设置当前会话隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- 设置系统当前隔离级别 SET global TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -
事务的ACID特性
- 原子性【Atomicity】
- 一致性【Consistency】
- 隔离性【Isolation】
- 持久性【Durability】
-

浙公网安备 33010602011771号