MySQ中事务的基本概念

/*** 事务 ***/
# 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
# 默认情况下单条sql语句都是自动提交事务
# 操作:
#      1、开启事务:start transaction
#      2、回滚:rollback
#      3、提交:commit
# MySQL事务默认的提交方式是自动提交,即每条SQL语句都是一个事务
# 查看提交方式 select @@autocommit
SELECT @@autocommit; 

# 事务四大特征
#      1、原子性:不可分割的最小单元,要么同时成功,要么同时失败
#      2、持久性:当事务提交或回滚后,数据库将会持久化地保存数据
#      3、隔离性:多个事务之间,相互独立。
#      4、一致性:事务操作的前后,数据总量不变

# 事务的隔离级别
# 概念:多个事务是隔离的,但多个事务操作的是同一批数据,则会出现问题,设置不同的隔离级别来解决这些问题;
# 问题:
#      1、脏读:一个事务读到了另一个事务还未提交的数据;
#      2、不可重复读(虚读):同一个事物,读取同一个数据,两次读取结果不一样;
#      3、幻读:一个事务操作了某个记录,另一个事务同样操作了这个记录,第一个事务查询不到自己的修改
# 隔离级别
#      1、read uncommitted:读未提交,存在问题123
#      2、read committed:读已提交,存在问题23
#      3、repeatable read:可重复读,存在问题3
#      4、serializable:串行化,没有问题,当有其他事务开启时,会阻塞等待其他事务提交后再执行
#      设置隔离级别越高,安全性越高,但性能越差,MySQL默认隔离级别是repeatable read,Oracle的默认级别是read commited
#  读取|修改隔离级别
#      SELECT @@tx_isolation;
#      SET GLOBAL TRANSACTION ISOLATION LEVEL READ xxx

-- 查看事务隔离级别
SELECT @@tx_isolation;

-- 修改事务隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

-- 查看自动事务提交状态
SELECT @@autocommit;

Leave a Reply