4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别



  1. 事务提交过程

  1. 事务

基本概念


概念:一个或者多个DML语言组成

特点:要么都成功,要么都失败

事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作,

否则出现:脏读 
不可重复读 
幻读


Oracle默认情况下,事务是打开的


commit案例:

SQL> create table t1(tid int,tname varchar2(20));

表已创建。

SQL> select * from tab;

TNAME                         
TABTYPE  CLUSTERID

------------------------------ ------- ----------

BONUS                         
TABLE

DEPT                          
TABLE

EMP                           
TABLE

EMP10                         
TABLE

SALGRADE                      
TABLE

T1       
                     TABLE

已选择6行。

SQL> insert into t1(tid,tname) values(1,‘aaaaa‘);

已创建 1
行。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL> commit;

提交完成。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL> rollback;

回退已完成。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL>



rollback案例:

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL> insert into t1(tid,tname) values(2,‘bbb‘);

已创建 1
行。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

2 bbb

SQL> rollback;

回退已完成。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL>

  1. Oracle中的事务生命周期

1.事务的起始标志 DML语言(oracle默认事务是打开的)


2.事务的结束标志


提交


显式提交commit


隐式提交


执行DDL语句

Eg:执行create table的时候还有1个隐式的功能

提交之前没有提交的DML语句(insert
update)


正常退出


回滚


显式rollback


隐式:掉电/宕机/非正常退出,这几者等价于系统出错了

4
保存点savepoint


案例:


SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL> insert into t1(tid,tname) values(2,‘bbb‘);

已创建 1
行。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

2 bbb

SQL> rollback;

回退已完成。

SQL> select * from t1;

TID TNAME

---------- --------------------

1 aaaaa

SQL>



总结:最后一条insert语句没有插入进去,回滚到了指定的保存点

  1. 数据库的隔离级别

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题


脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚。T1读取的内容就是临时且无效的。


不可重复读:对于两个事物T1,T2,T1读取了一个字段,然后T2更新了该字段,之后T1再次读取同一个字段,值就不同了。


幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行。


数据库事务的隔离性:数据库系统必须具有隔离并发运行多个事务的能力,使它们不会相互影响,避免各种并发问题。


一个事务与其他事务隔离的程度称为隔离级别.
数据库规定了多种事务隔离级别,
不同隔离级别对应不同的干扰程度,
隔离级别越高,
数据一致性就越好,
但并发性越弱


数据库提供4中事务隔离级别:sql99



Oracle
支持的
2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle
默认的事务隔离级别为: READ COMMITED

另外还支持一种隔离级别:read-only


Mysql
支持
4 中事务隔离级别. Mysql
默认的事务隔离级别为: REPEATABLE READ

时间: 2024-10-24 02:34:53

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别的相关文章

MySQL事务提交过程(一)

MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提交过程. MySQL体系结构 由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交,通过两阶段提交,来保证存储引擎和二进制日志的一致. 本文仅讨论binlog未打卡状态下的提交流程,后续会讨论打开binlog选项后的提交逻辑. 测试环境 OS:WIN7 ENGINE: bin-log:off DB: 测试条件 set autocommit=0; -- --------------

MySQL事务提交过程(二)

上一篇文章我们介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlog,是因为开启binlog后事务提交流程会变成两阶段提交,这里的两阶段提交并不涉及分布式事务,当然mysql把它称之为内部xa事务(Distributed Transactions),与之对应的还有一个外部xa事务. 这里所谓的两阶段提交分别是prepare阶段和commit阶段. 内部xa事务主要是mysql内部为了保证binlog与redo log之间数据的一致性而存在的,这也是由其架构决定的(binlo

检查Oracle 中死事务的语句

SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */ 2 KTUXESTA Status, KTUXECFL Flags ,KTUXESIZ 3 FROM x$ktuxe 4 WHERE ktuxesta!='INACTIVE'; KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS KTUXESIZ ---------- ---------- ---------- ----------------

mysql 事务提交过程

打开binlog选项后,执行事务提交命令时,就会进入两阶段提交模式.两阶段提交分为prepare阶段和commit两个阶段.流程如下 :这里面涉及到两个重要的参数:innodb_flush_log_at_trx_commit和sync_binlog,参数可以设置不同的值,具体可以查看mysql的帮助手册.我这里设置的是双一模式(innodb_flush_log_at_trx_commit=1,sync_binlog=1),不同的模式区别在于,写文件调用write和落盘fsync调用的频率不同,所

从一个线上问题分析binlog与内部XA事务提交过程

1. 问题业务上新增一条订单记录,用户接收到BinLake拉取的MySQL从库数据消息后,马上根据消息内的订单号去查询同一个MySQL从库,发现有些时候无法查到该条数据,等待大约500ms-1000ms后再去查询数据库,可以查询到该条数据.注: BinLake为京东商城数据库技术部自研的一套订阅和消费MySQL数据库binlog的组件,本例所描述的问题是业务方希望根据订阅的binlog来获取实时订单等业务消息.2. Binlog与内部XA2.1. XA的概念XA(分布式事务)规范主要定义了(全局

oracle中的事务

数据库事务有严格的定义,它必须满足4个特性:原子性(Atomic):表示组成一个事务的多个数据库操作是一个不可分割的原子单元只有所有的操作执行成功,整个事务才能提交,事务中任何一个数据库操作失败,己经执行的任何操作都必须撤销,让数据主加返回到初状态.一致性(Consistency):事务操作成功后,数据所处的状态和它的业务规则是一致的,即数据不会被被破坏.如从A账户转账100元到B账户,不管操作成功与否,A和B的存款总额不变的.隔离性(Isolation):在并发数据操作时,不同的事务拥有各自的

【Oracle】浅析Oracle中的事务

1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行. 如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性. 2. 事务特性 SQL92标准定义了数据库事务的四个特点: 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做. 一致性(Consistency):事务开始时,数据库中的数

Oracle 浅析Oracle中的事务

1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行. 如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性. 2. 事务特性 SQL92标准定义了数据库事务的四个特点: 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做. 一致性(Consistency):事务开始时,数据库中的数

Oracle中的事务(1)

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.---[来自百度百科] 事务的四大特性: 原子性(atomicity) 事务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 一致性(consistency) 事务在完成时,必须使所有的数据都保持