1. 什么是事务
- 作为单个逻辑工作单元执行的一系列操作,由多条语句组成的集合,要么全部成功,要么全部失败,数据库通过事务来保证数据的一致性
2. 数据处理方式
1. OLTP 联机事务处理
- 用于关系型数据库,处理传统的日常基本事务操作,数据量不很大,GB级,例如银行交易
- 特点
- 实时性要求高
- 数据量不是很大,属于GB级别
- 高并发,且满足ACID,供多用户同时访问
- 交易一般是确定的,对确定性的数据进行存取
2. OLAP 联机分析处理
- 用于数据仓库系统,供大数据进行数据挖掘等,支持复杂的分析操作,侧重于决策的支持,可提供直观易懂的查询结果
- 特点
- 实时性要求不是很高
- 数据量大,属于PB级别
- 重点是通过数据提供决策支持,所以查询一般是动态的,会将用户关心的所有维度数据存入对应数据平台
- 应用
- noSql数据库
- 列式存储模式,如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)
隔离级别名称 | 含义 |
---|
读未提交 | 即事务未提交之前就可以读取,易产生脏读 |
读已提交 | 仅当事务提交后其他事务才可读,但可做增删改,会发生幻读和不可重复读 |
反复读 | 限定了其他事务对当前事务的删改,从而保证反复读取同一条记录不会发生变动,但未禁止增操作,会发生幻读 |
序列化 | 即锁定当前数据直至事务完成为止,其他事务都不可做增删改查操作 |