0
点赞
收藏
分享

微信扫一扫

MacOS 升级golang版本后无法debug,升级delve版本

zhyuzh3d 2023-07-03 阅读 73

前言

 目录

前言

 目录

一、事务的简介

二、事务操作

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

 2.2 手动开启事务

2.3 提交事务

2.4 回滚事务 

2.5 案例练习

2.5.1 查看MySQL事务

2.5.2 银行转账模拟练习

2.5.2.1 创建余额表

2.5.2.2 模拟转账流程 李白给杜甫转账1000元 (自动提交事务模式)

2.5.2.3 模拟转账流程 李白给杜甫转账1000元 (手动提交事务模式) 

三、事务的四大特性

四、并发事务问题与事务的隔离级别

4.1 并发事务的问题

4.2 事务的隔离别

 4.3 相关语句

4.3.1 查看事务的隔离界别

4.3.2 设置事务的隔离界别

4.4 实战练习

4.4.1 打开两个客户端进行操作​编辑

4.4.2 查看事务隔离级别

4.4.3 查看当前表中的数据

4.4.4 在另一个客户端进行更新操作

4.4.5 再另一个客户端进行查询操作

4.4.6 设置事务隔离级别为read committed

4.4.7 设置为repeatable read

4.4.8 设置事务的隔离级别为serializable;

五、总结


一、事务的简介

注意:默认MvSQL的事务是自动提交的,也就是说,当执行一条DML(insert、update、delete、select)语句,MvSQL会立即隐式的提交事务。

二、事务操作

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

select @@autocommit;

 2.2 手动开启事务

start transaction;
begin;

2.3 提交事务

commit;

2.4 回滚事务 

rollback;

2.5 案例练习

2.5.1 查看MySQL事务
select @@autocommit;

   为1表示自动提交,为0表示需要手动提交事务,改为手动之后再提交事务时候必须使用commit,同时也需要自己进行回滚。

2.5.2 银行转账模拟练习
2.5.2.1 创建余额表

表结构如下

create table account
(
    id    int auto_increment primary key comment '用户id',
    name  varchar(10) comment '姓名',
    money int comment '余额'
);

添加数据

insert into account values('001','李白',5000),('002','杜甫',3000),('003','白居易',2500);
2.5.2.2 模拟转账流程 李白给杜甫转账1000元 (自动提交事务模式)

1.查询李白的账户

select * from account where name='李白';

2.李白的账户减去1000

update account set money=money-1000 where name='李白';

3.杜甫的账户增加1000

update account set money=money+1000 where name='杜甫';

4.查询账户表

select * from account;

2.5.2.3 模拟转账流程 李白给杜甫转账1000元 (手动提交事务模式) 

设置MySQL为自动提交事务,设置autocommit为0。

set @@autocommit=0;

1.开启事务

start transaction;

以下插入数据对数据进行操作的流程同2.5.2.2。

执行出错,要对事务进行回滚。要么全部执行,要么一个也不执行。

n.提交事务

commit;

三、事务的四大特性

四、并发事务问题与事务的隔离级别

4.1 并发事务的问题

4.2 事务的隔离别

注意: 事物的隔离级别越高,数据越安全,但是性能越低。 需要去权衡数据的安全性和并发性,进行设置事物的隔离级别。

 4.3 相关语句

4.3.1 查看事务的隔离界别

select @transaction_isolation;

4.3.2 设置事务的隔离界别

set
[session/global] transaction isolation level [read uncommitted | read committed |repeatable read |serializable];

4.4 实战练习

4.4.1 打开两个客户端进行操作

4.4.2 查看事务隔离级别
select @@transaction_isolation;

事务的隔离级别为默认值.

set session transaction isolation level read uncommitted;
4.4.3 查看当前表中的数据

4.4.4 在另一个客户端进行更新操作
set session transaction isolation level read uncommitted;
4.4.5 再另一个客户端进行查询操作

4.4.6 设置事务隔离级别为read committed
set session transaction isolation level read committed;

4.4.7 设置为repeatable read
set session transaction isolation level repeatable read;

在一个客户端查询id=4是否存在

select * from account where id='4';

在另一个客户端插入一条数据

select * from account where id='4';

在第一个客户端插入数据出现错误,但是查询id=4的仍然为空

select * from account where id='4';

出现幻读现象

4.4.8 设置事务的隔离级别为serializable;

当一个事务提交之后完毕之后另一个事务才开始执行,规避了幻读的问题

注意:事务的隔离级别越高,数据越安全,但是性能越低。

五、总结

举报

相关推荐

0 条评论