MySQL中的事务特点

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)

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

猜你喜欢

转载自blog.csdn.net/wxfghy/article/details/80244831