您现在的位置是:首页 >技术教程 >09:mysql---事务网站首页技术教程

09:mysql---事务

x.ns 2024-07-03 06:01:02
简介09:mysql---事务

目录

1:事务简介

2:事务操作

3:事务四大特性

4:并发事务问题

5:事务隔离级别 


1:事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

默认MysQL的事务是自动提交的,也就是说,当执行一条DML语句,MysQL会立即隐式的提交事务

2:事务操作

第一种方式

查看/设置事务的提交方式

select @@autocommit;   -- @@autocommit不能有空格否则报错

set @@ autocommit=0;     -- 把事务设置为手动的

1:自动   0:手动

提交事务

commit;

回滚事务

rollback
-- 准备的数据
drop table account;
delete from account;
update account set monkey=3000 where name='王大志';
update account set monkey=2000 where name='自习';
create table account (
id int primary key  auto_increment,
name varchar(20) not null ,
age varchar(20) not null ,
monkey varchar(20) not null 
) comment '人员的信息';
insert into  account (age,name,monkey) values (18,'王大志',3000),(20,'自习',2000);



select @@autocommit;
set @@autocommit=0;
-- 1。 查询王大志三账户余额
select monkey from account where name='王大志';
-- 2。将王大志账户余额-1000
update account set monkey=monkey-1000 where name='王大志';

这里发出错误了
-- 3。将自习账户余额+1000
update account set monkey=monkey-1000 where name='自习';

-- 提交事务
commit
-- 回滚
rollback

sql默认的事务是自动的  但是如果在出现错误时:王大志给自习转账1000元,但是在给自习加上1000元钱之前sql发生错误,  就会导在我王大志-1000 但是自习没有加上1000;      我们这个时候就会把sql的事务该为手动的,在发生错误时我们选择回滚,数据并不会提交到数据库里面而是保证执行sql前的数据;    如果没有sql错误我们选择提交事务把这个命令提交到数据库层面

第二种方式

开启事务--默认改为手动

start transaction  或者 begin;

提交事务

commit

回滚事务

rollback;

3:事务四大特性

原子性 (Atomicity): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性(Consisteny): 事务完成时,必须使所有的数据都保持一致状态

隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行

持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

4:并发事务问题

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

 

 

 

5:事务隔离级别 

隔离级别赃读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××

查看事务的隔离级别

select @@transaction_isolation;

设置事务隔离级别

set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable}
-- 查看事务隔离级别
select @@transaction_isolation;
-- 设置事务隔离级别
set session transaction isolation level read uncommitted ;
set session transaction isolation level repeatable read ;
-- session设置这次的绘画,更改隔离级别

脏读:

 改变事务级别为,解决脏读问题:

 不可以重复读:

  ​​​​​​​改变事务级别为,解决不可重复读问题:

 幻读:

   ​​​​​​​改变事务级别为,解决幻读问题:

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。