数据库概述10(事务)

MySQL事务

MySQL事务机制主要用于处理操作量大、复杂度高的数据
在MySQL中只有使用了Innodb数据库引擎的数据表和数据库才支持事务
事务处理可以用来维护数据的完整性,保证多条SQL语句要么全部执行,要么全部不执行
事务用于管理insert、update和delete之类的DML语句,[select语句],其它类型的SQL语句没有事
务的概念

概述事务

事务必须满足ACID4个条件:

A原子性、C一致性、I隔离性、D持久性

原子性:一个事务中的所有操作要么全部完成、要不一个都不做,不会结束在中间某个环节
一致性:事务执行结束后数据库的完整性没有破坏
隔离性:数据库允许多个并发事务对数据库中的数据进行读写操作,隔离性可以防止多个事务并发
执行时导致的数据不一致性。事务根据隔离等级可以分为4级:读未提交、读已提交、可重复读和串行化
持久性:事务执行完成后对数据的修改就是永久的

在MySQL命令行的默认设置下,事务都是自动提交的。如果需要使用事务则需要显式的开启事务start transaction或者begin,或者执行命令set autocommit=0,用来禁止使用当前会话的自动提交
delete from和tuncate table的区别
事务与数据库底层数据
事务的进行过程中,在未结束之前,DML语句并不会直接更改底层数据,只是将历史操作记录一下,在内存中完成记录。只有在事务结束时,而且应该是成功结束时,才会修改底层硬盘文件中的数据
事务的原子性是通过undo log来实现
事务的持久性是通过redo log来实现
事务的隔离性是通过【读写锁+MVCC多版本并发控制】来实现的
事务的一致性是通过原子性、持久性和隔离性来实现的

事务控制语句

begin或者 start transaction可以显式的开启一个事务,结束事务有提交和回滚2种方式
commit提交事务,并使已执行的对数据库的所有修改成为永久性修改
rollback回滚结束事务,撤销已经执行的未提交的修改操作
savepoint 标识名称 用于在事务过程种创建一个保存点,从而支持部分回滚。一个事务中可以添加多个保存点
release savepoint 标识名 用于删除一个事务的保存点,如果对应名称的保存时不存在则抛出异常
rollback to 标识名 将事务回滚到指定的保存点,执行名称的保存点到当前位置的所有操作撤销,但是保存点之前的操作仍旧保留,等待事务结束
set transaction isolation level用于设置事务的隔离性,innodb存储引擎提供的隔离性有读未提交
read uncommitted、读已提交read committed、可重复读repeatable read和serializable串行化,系统默认隔离等级为可重复读

事务处理

begin或者start transaction开启事务 rollback事务回滚 commit事务提交
还可以使用set改变MySQL的自动提交模式
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交

基本测试

在navicat或者命令行中开启两个窗口模拟两个并发修改数据库的进程
1、创建数据库 create database test1;
2、切换当前库 use test1;
3、创建测试使用的表 create table t1(id int primary key,name varchar(32))engine=innodb;
MySQL8默认数据库的存储引擎就是innodb
4、开启事务: begin;
5、插入操作: insert into t1 values(1,‘zhangsan’); ,在另外一个窗口中执行查询,则看不到插入的数据,因为事务的默认隔离等级为可重复读
6、提交事务 commit; 修改生效,另外一个窗口中则能够查询到数据
7、如果没有提交还可以使用rollback撤消修改操作

多点回滚

相关日志问题
事务的原子性是通过undo log来实现
事务的持久性是通过redo log来实现
begin;
update t1 set name=‘modify1’ where id=1;
select * from t1;
savepoint s1;
delete from t1;
rollback to s1;
select * from t1;
commit;
redo log
如果每次读写数据都需要磁盘的IO,效率会很低。innodb提供了缓存buffer pool作为访问数据库的缓存,读取和修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值