mySql的事务(操作一下)

作者 : admin 本文共1191个字,预计阅读时间需要3分钟 发布时间: 2024-06-17 共1人阅读

目录

  • 1. 简介
  • 2. 事务操作
  • 3. 四大特性
  • 4. 并发事务问题
  • 5. 脏读
  • 6. 不可重复读
  • 7. 幻读
  • 事务隔离级别
  • 参考链接

1. 简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认的MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式的提交事务

2. 事务操作

  • 查看/设置事务提交方式
    SELECT @@autocommit;
    SET @@autocommit = 0;
  • 提交事务
    COMMIT;
  • 回滚事务
    ROLLBACK;
select * from commodity;

select @@autocommit;

-- 手动提交

set @@autocommit = 0;

-- 涨价
-- 1. 查询鼠标的价格

select price from commodity where name = '鼠标';

-- 2. 修改

update commodity set price = price + 100 where name = '鼠标';

update commodity set price = price + 100 where name = 'U盘';

commit;

-- 回滚事务

rollback;
  • 开始事务
    START TRANSACTION 或 BEFIN;
  • 提交事务
    COMMIT;
  • 回滚事务
    ROLLBACK;

3. 四大特性

  • 原子性:事务是不可分割的最小操作单元
  • 一致性:事务完成时,必须使所有的数据都保持一致状态
  • 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性:事务一旦回滚或提交,对数据库中的数据的改变是永久的

4. 并发事务问题

脏读:一个事务读到另外一个事务还没有提交的数据
不可重复读:一个事务先后读取一条记录,但两次读取的数据不同,称之为不可重复读
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

5. 脏读

设置事务隔离级别
set session transaction isolation leel read uncommitted;
mySql的事务(操作一下)插图
开启事务
start transaction;
mySql的事务(操作一下)插图(1)
修改aaa的money(尚未提交),然而事务A却变化了
mySql的事务(操作一下)插图(2)
回滚后,跟着变化
mySql的事务(操作一下)插图(3)
修改事务的隔离级别,同时开启事务
set session transaction isolation level read committed;
mySql的事务(操作一下)插图(4)
不再改变,可以解决脏读!!!
mySql的事务(操作一下)插图(5)

6. 不可重复读

不提交之前进行读取,提交后进行读取
同一个事务,结果却不一样!!!
mySql的事务(操作一下)插图(6)
mySql的事务(操作一下)插图(7)
把隔离级别再升一级
set session transaction isolation level repeatable read;
这个时候就不会出现不可重复读!!!

7. 幻读

mySql的事务(操作一下)插图(8)
mySql的事务(操作一下)插图(9)
这里存在了,报错!!!
设置隔离级别
set session transaction isolation level serializable;

事务隔离级别

画!表示无法解决
mySql的事务(操作一下)插图(10)

参考链接

无。。。

本站无任何商业行为
个人在线分享-虚灵IT资料分享 » mySql的事务(操作一下)
E-->