MySQL中的事务特点

12 篇文章 0 订阅

1. 什么是事务

  • 作为单个逻辑工作单元执行的一系列操作,由多条语句组成的集合,要么全部成功,要么全部失败,数据库通过事务来保证数据的一致性

2. 数据处理方式

1. OLTP 联机事务处理
  • 用于关系型数据库,处理传统的日常基本事务操作,数据量不很大,GB级,例如银行交易
  • 特点
    1. 实时性要求高
    2. 数据量不是很大,属于GB级别
    3. 高并发,且满足ACID,供多用户同时访问
    4. 交易一般是确定的,对确定性的数据进行存取
2. OLAP 联机分析处理
  • 用于数据仓库系统,供大数据进行数据挖掘等,支持复杂的分析操作,侧重于决策的支持,可提供直观易懂的查询结果
  • 特点
    1. 实时性要求不是很高
    2. 数据量大,属于PB级别
    3. 重点是通过数据提供决策支持,所以查询一般是动态的,会将用户关心的所有维度数据存入对应数据平台
  • 应用
    1. noSql数据库
    2. 列式存储模式,如HBase
3.ACID
特性作用备注
原子性保证并发操作买卖同时进行
一致性保证数据一致买卖内容相同
隔离性保证独立执行买卖与其他买卖无关
持久性保证数据存储买卖的结果可保存
4. mysql中实现事务的语法
  • mysql默认不支持事务,原因是autocommit=1默认自动提交,在InnoDB引擎下可通过修改autocommit=0关闭自动提交功能后实现事务
commit      提交
rollback    回滚
  • 直接写事务:
set autocommit=0;
start transaction;
操作1
commit;
操作2
rollback;
  • 将事务写入函数:
create procedure 函数名()
begin
set autocommit=0;
操作1
commit;
操作2
rollback;
end;
call 函数名();    //执行该函数
5. 在DBMS(数据库管理系统)并发事务的操作中,对数据可能产生哪些影响?如何解决
问题名称含义
丢失数据的修改在数据库中实施锁机制,每个事务都可以有自己的锁,如事务A锁定某行数据,事务B并发执行该行数据的修改,由于原子性和隔离性导致事务B无法修改
脏读事务A修改某数据,在提交之前事务B并发读取该数据(mysql下无法读取其他事务未提交的数据),那么这个数据就是脏数据
不可重复读事务A第一次读取某数据,然后事务B修改该数据,之后事务A再次读取该数据,则两次读取的数据不同
幻读事务A第一次修改某数据表,然后事务B插入一条新数据,之后事务A再次修改该表时会发现本不该存在的数据,即幻觉

解决方法一般是通过加锁

6. mysql中事务的隔离级别

隔离级别
在mysql中默认的隔离级别为反复读(Repeatable read)

隔离级别名称含义
读未提交即事务未提交之前就可以读取,易产生脏读
读已提交仅当事务提交后其他事务才可读,但可做增删改,会发生幻读和不可重复读
反复读限定了其他事务对当前事务的删改,从而保证反复读取同一条记录不会发生变动,但未禁止增操作,会发生幻读
序列化即锁定当前数据直至事务完成为止,其他事务都不可做增删改查操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值