14、mysql中事务的应用

是什么

事务是一种保护连续操作同时满足(实现)的一种机制,用来保护数据的完整性,只适用于数据操作,不适用于结构操作,只有

innodb引擎的表具有事务安全的机制。就是说,在一个事务中做一系列的sql操作,当且仅当一系列sql都执行成功时,才会对数据

库的数据进行对应的持久化

事务的特性

事务有四大特性:ACID

A:atomic原子性,事务的整个操作是一个整体,不可分割,要么全部成功,要么全部失败
C:consistency一致性,事务操作前后,数据表中的数据没有变化
I:isolation隔离性,事务操作是互相隔离不受影响的
D:durability持久性,数据一旦提交,不可改变,永久的改变数据表数据

事务的分类

事务可分为自动事务和手动事务,mysql中默认是自动事务

事务通过autocommit变量控制,当autocommit = off/0 时表示手动事务,下边介绍一下查看自动事务是否开启和开启事务

操作查看事务
sqlshow variables like 'autocommit';
结果
操作开启或关闭事务
sql

set autocommit = 0;

set autocommit = 1;

结果

事务的操作

# 使用事务
-- 开启事务(系统将将要进行的操作不直接写入到数据表,而是现存在事务日志)
start transaction;

-- 执行对应的sql
update user set name = 'chaizepeng111' where id=5;
update card set card_number = '111111111' where id = 4;

-- 提交或者回滚
commit;

# 回滚点的设置
savepoint 回滚点名字;
savepoint a;

-- 回滚到指定的回滚点
rollback to a;

事务的原理

事务的实现借助的是一个临时的日志文件,当开始事务时,发送的sql会存储到日志文件中,存储到日志文件时执行sql,将结果

存储到日志文件,当查询时,会将返回的结果经过日志文件加工后再返回,当commit时,临时文件中的结果就会同步到数据库

中,而如果rollback时,则会删除临时文件,不做任何操作

事务的隔离级别

在并发环境下使用事务时,就可能产生问题,问题大致分为3类,如下:

脏读事务A读到了事务B还未提交的数据
不可重复读在一个事务里面读取了两次某个数据,读出来的数据不一致
幻读在一个事务里面的操作中发现了未被操作的数据

为了解决以上问题,就出现了事务的隔离级别

DEFAULT默认隔离级别
READ_UNCOMMITTED读未提交,即能够读取到没有被提交的数据,一般不用
READ_COMMITED读已提交,即能够读到那些已经提交的数据,可防止脏读,一般使用此隔离级别
REPEATABLE_READ重复读取,即在数据读出来之后加锁,读取数据之后自动加锁,当前事务为结束之前,其他事务不可访问,解决了脏读、不可重复读的问题
SERLALIZABLE串行化,最高的事务隔离级别,一个事务一个事务挨着执行,效率低,不用

介绍一下mysql下如何查看和设置事务的隔离级别

解释查看事务的隔离级别
sqlselect @@tx_isolation;
结果
解释设置当前会话的事务隔离级别
sqlSET SESSION TRANSACTION ISOLATION LEVEL Read committed;
结果
解释设置全局的事务隔离级别
sqlSET GLOBALTRANSACTION ISOLATION LEVEL Read committed;
结果

补充:事务的隔离级别设置时的可选参数:Read uncommitted 、Read committed 、Repeatable read 、Serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值