MySQL_基础_TCL事务控制语言

事务ACID特性与并发问题
本文详细介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并探讨了事务并发过程中可能出现的问题,如脏读、不可重复读和幻读等。此外,还列举了不同隔离级别的特性及如何在MySQL中设置这些隔离级别。

事务(ACID)的特性

原子性(Atomicity)    一个事务不可再分割,要么都执行要么都不执行
一致性(Consistency)  一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性(Isolation)    一个事务的执行不受其他事务的干扰
持久性(Durability)   一个事务一旦提交,则会永久的改变数据库的数据

 

事务的并发问题

脏读:读到未提交更新数据,就是读到另一个事务未提交数据,就是脏数据
不可重复读:对同一记录两次读取不一致,因为另一事务对该记录做了修改
幻读:对同一张表的两次查询不一致,因为另一事务插入了一条数据

 

事务的隔离级别

隔离级别                    脏读       不可重复读        幻读
未提交读(READ-UNCOMMITTED)   √            √            √
已提交读(READ-COMMITTED)     ×            √            √
可重复读(REPEATABLE-READ)    ×            ×            √
可串行化(SERIALIZABLE)       ×            ×            ×

Oracle 支持的 2 种事务隔离级别: READ-COMMITTED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ-COMMITTED
Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE-READ

查看隔离级别
SELECT @@[session.]tx_isolation;                        # 查看会话隔离级别
SELECT @@global.tx_isolation;                           # 查看全局隔离级别

设置隔离级别
SET [SESSION] TRANSACTION ISOLATION LEVEL 隔离级别;     # 设置会话隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;        # 设置全局隔离级别

 

事务的使用

事务提交
    SET autocommit = 0;                                           # 关闭自动提交
    START TRANSACTION;                                            # 开启事务
    INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
    INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
    COMMIT;                                                       # 提交所有
    SET autocommit = 1;                                           # 开启自动提交

事务回滚
    1、回滚所有
    SET autocommit = 0;                                           # 关闭自动提交
    START TRANSACTION;                                            # 开启事务
    INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
    INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
    ROLLBACK;                                                     # 回滚所有
    SET autocommit = 1;                                           # 开启自动提交

    2、回滚至保存点
    SET autocommit = 0;                                           # 关闭自动提交
    START TRANSACTION;                                            # 开启事务
    INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
    SAVEPOINT a;                                                  # 设置保存点
    INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
    ROLLBACK TO a;                                                # 回滚至保存点
    SET autocommit = 1;                                           # 开启自动提交

 

转载于:https://www.cnblogs.com/Small-music/p/9274339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值