Oracle 事务总结

Jun 07, 2016 pm 05:00 PM
データベース

1、事务概念: 概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制

1、事务概念:  
 概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么完全成功执行,完成整个工作单元操作,要么一点也不执行。  
  主要特性:确保数据库的完整性。  
2、事务的ACID特性  
  对一组SQL语句操作构成事务,数据库操作系统必须确保这些操作的原子性,一致性,隔离性,持久性.  
1、  原子性(Atomicity)  
    事务的原子性是指事务中包含的所有操作要么全做,要么不做,也就是说所有的活动在数据库中要么全部反映,要么全部不反映,以保证数据库的一致性。  
2、  一致性(Consistency)  
    事务的一致性是指数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束。  
3、  隔离性(Isolation)  
   隔离性是指数据库允许多个并发的事务同时对其中的数据进行读写或修改的能力,隔离性可以防止多个事务的并发执行时,由于它们的操作命令交叉执行而导致数据的不一致性。  
4、  持久性(durability)  
    事务的持久性是指在事务处理结束后,它对数据的修改应该是永久的。即便是系统在遇到故障的情况下也不会丢失,这是数据的重要性决定的。   
  
 
3、事务的控制语句  
   在Oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的,也就是说在oracle中,用户不可以显示使用命令来开始一个事务.oracle任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务的隐式开始。但是当用户想要终止一个事务处理时,必须显示使用commit和rollback语句结束。  
  根据事务ACID属性,oracle提供了如下的事务控制语句:  
   Set transaction 设置事物属性  
   Set constrains  设置事物的约束模式  
   约束模式是指:在事务中修改数据时,数据库中的约束立即应用于数据,还是将约束推迟到当前事务结束后应用。  
   Savepoint 在事务中建立一个存储的点.当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点.然后从该存储点重新执行。  
   Release  savepoint  删除存储点  
   Rollback 回滚事务 取消对数据库所作的任何操作  
   Commit 提交事务 对数据库的操作做持久的保存。  
 
 
  3、1设置事物的属性:  
  set transaction语句可用来设置事物的各种属性。该语句必须放在事务处理的第一个语句.  
也就是说,必须在任何insert、update 、delete语句以及其他的事务处理。  
  Set transaction的语句可以让用户对事务的以下属性进行设置  
    指定事务的隔离层  
    规定回滚事务所使用的存储空间  
    命名事务  
 备注:在使用set transaction语句设置属性时,对于规定回滚事务所使用的存储空间的设置很少使用.对于命名事务也非常简单,只有在分布式事务处理中才会体现出命名事务的用途.  
 
 注意:set transaction只对当前事务有效,事务终止,事务当前的设置将会失效。  
 
1、  数据异常  
事务的隔离性定义了一个事务与其它事务的隔离程度.为了更好的理解隔离层,首先讨论一下并发事务对同一个数据库进行访问可能发生的情况.在并发事务中总体来说会发生如下3种情况  
    错读 |脏读  
    非重复读取|不可重复读  
    假读|幻读  
 
    错读|脏读:当一个事务修改数据时,另一事务读取了该数据,但是第一事务由于某种原因取消对数据修改,使数据返回了原状态,这是第二个事务读取的数据与数据库中数据不一致.这就叫错读。  
 
   非重复读取:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。  
 
   假读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。  
 
    事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。  
2、  选择隔离层  
   针对3中读取的数据时产生的不一致现象,在ANSI SQL标准92中定义了4个事务的隔离级别.如下图所示:  
隔离层 错读|脏读   非重复读取|不可重复读 假读|幻读  
READ UNCOMMITTED(非提交读)  是   是   是  
READ COMMITTED(提交读) 否   是   是  
Repeatable READ(可重复读)   否   否   是  
Serializable(串行读)   否   否   否  
 
Oracle支持上述四种隔离层中的两种:read committed 和serializable。除此之外oralce中还定义read only 和 read write隔离层。  
 Read committed 这是oracle默认的隔离层。  
Serializable:设置事物的隔离层位它时,事务与事务之间完全隔开,事务以串行的方式执行,这并不是说一个事务必须结束才能启动另外一个事务,而是说这些事务的执行的结果于一次执行的事务的结果一致。  
 
Read only和 read write 当使用read only时,事务中不能有任何修改数据库中数据的操作语句,这包括 insert、update、delete、create语句。Read only是serializable的一个子集,区别是read only 只读,而serialzable可以执行DML操作。Read write它是默认设置,该选项表示在事务中可以有访问语句、修改语句.但不经常使用.  
 
 
 
3、  建立set transaction的语句  
 列举如下:  
  Set transaction read only  
  Set transaction read write  
  Set transaction isolation level read committed  
  Set transaction isolation level serializable  
 
注意:这些语句是互斥的.即不能够同时设置两个或者两个以上的选项。  
 
 
4、  结束事务:  
什么情况下代表事务的结束呢?  
     
1、  Commit 提交事务  
2、  rollback 回滚事务    
 
//只读的案例  
SQL> set transaction read only;  
   
Transaction set  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  redarmy          陈红军                                   
   
SQL> update users set password='123' where username='mj';  
   
update users set password='123' where username='mj' 
   
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作  
 
//脏读的案例  
SQL> set transaction isolation level read committed;  
   
Transaction set  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  redarmy          陈红军                                   
   
SQL> update users set password='123' where username='mj';  
   
1 row updated  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  123                 陈红军                                   
   
SQL> rollback;  
 
 
以上内容归redarmy_chen创建,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com 

linux

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Mar 27, 2024 pm 09:39 PM

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

HTML がデータベースを読み取る方法の詳細な分析 HTML がデータベースを読み取る方法の詳細な分析 Apr 09, 2024 pm 12:36 PM

HTML はデータベースを直接読み取ることはできませんが、JavaScript と AJAX を通じて実現できます。この手順には、データベース接続の確立、クエリの送信、応答の処理、ページの更新が含まれます。この記事では、JavaScript、AJAX、および PHP を使用して MySQL データベースからデータを読み取る実践的な例を示し、クエリ結果を HTML ページに動的に表示する方法を示します。この例では、XMLHttpRequest を使用してデータベース接続を確立し、クエリを送信して応答を処理することで、ページ要素にデータを埋め込み、データベースを読み取る HTML の機能を実現します。

MySQL データベース管理システムの基本原理の分析 MySQL データベース管理システムの基本原理の分析 Mar 25, 2024 pm 12:42 PM

MySQL データベース管理システムの基本原理の分析 MySQL は、データの保存と管理に構造化照会言語 (SQL) を使用する、一般的に使用されるリレーショナル データベース管理システムです。この記事では、データベースの作成、データ テーブルの設計、データの追加、削除、変更などの操作を含む、MySQL データベース管理システムの基本原理を紹介し、具体的なコード例を示します。 1. データベースの作成 MySQL では、まずデータを保存するデータベース インスタンスを作成する必要があります。次のコードは、「my」という名前のファイルを作成できます。

PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 Mar 27, 2024 pm 05:21 PM

PHP は Web サイト開発で広く使用されているバックエンド プログラミング言語であり、強力なデータベース操作機能を備えており、MySQL などのデータベースとの対話によく使用されます。ただし、中国語の文字エンコーディングは複雑であるため、データベース内で中国語の文字化けを処理するときに問題が発生することがよくあります。この記事では、文字化けの一般的な原因、解決策、具体的なコード例を含め、データベース内の中国語の文字化けを処理するための PHP のスキルと実践方法を紹介します。文字化けの一般的な原因は、データベースの文字セット設定が正しくないことです。データベースの作成時に、utf8 や u などの正しい文字セットを選択する必要があります。

Go WebSocket はどのようにデータベースと統合しますか? Go WebSocket はどのようにデータベースと統合しますか? Jun 05, 2024 pm 03:18 PM

GoWebSocket をデータベースと統合する方法: データベース接続をセットアップする: データベースに接続するには、database/sql パッケージを使用します。 WebSocket メッセージをデータベースに保存する: INSERT ステートメントを使用して、メッセージをデータベースに挿入します。データベースから WebSocket メッセージを取得する: データベースからメッセージを取得するには、SELECT ステートメントを使用します。

See all articles