ORACLE事务整理: 1、为什么要有事务的存在? 对数据库的访问是一个多用户且存在高并发的操作,如多用户在某一时间点上对同一条数据实行更新操作,导致数据严重混乱、不一致、破坏了数据的完整和安全性。 数据库事务管理这一应用横空出世,解决了多用户高并
ORACLE事务整理:
1、为什么要有事务的存在?
对数据库的访问是一个多用户且存在高并发的操作,如多用户在某一时间点上对同一条数据实行更新操作,导致数据严重混乱、不一致、破坏了数据的完整和安全性。
数据库事务管理这一应用横空出世,解决了多用户高并发下数据严重混乱的情况,很好的控制多用户高并发环境下所可能带来的数据混乱、不一致性,保证了数据完整性
和安全性。此乃真是一计灵丹妙药(事务管理)。假设数据库不存在事务处理特性,导致后果主要有:
1). 脏读:两个事务并发情况下,其中一个事务读取了另一个事务更新但未提交的记录,这时另外一个事务处于某种考虑回滚该更新操作。其中第一个数据读的数据就
是数据库中不存在的数据,也就是脏数据,被称为脏读(oracle中不存在脏读)。
2).幻读:一个事务,两个不同时间,读取的数据不同,被他人更新了。
3).不可重复读:一个事务,T1有一个查询结果集,T2再查询,数据变多了,他人有插入。
说白了,数据库事务处理就是为解决上面三个问题而存在的。操作数据库时加上事务特性处理,就不怕当前会话操作的数据,被另外一个会话所打搅。
2、什么是事务?
事务是一条或多条SQL语句组成的逻辑执行块,这块中内容SQL要么全都执行成功,那么全执行失败。不存在部分SQL执行成功或失败。(之所以事务返回状态都是一致或
成功或失败,是因为有事务隔离级别这么一说,见下文介绍)。事务使得执行数据库操作互不影响。
3、事务具备的特性?
1). 原子性:一个事务要么全执行成功,要么全执行失败。比如,事务里面有100条执行SQL,要么100条SQL全部执行成功,如有一条执行失败,事务将其他执行成功SQL
回滚为之前状态。
2).一致性:事务状态必须为一致的。比如,银行转账A账户给B账户装100¥,这是B账户+100¥同时A账户必须-100¥,从一个一致性状态转变为另外一个一致性状态。
3).隔离性:事务执行互不影响。每个事务只能干预事己内部的操作,而无法干预别的事务操作。
4).永久性:事务一旦提交,产生数据变化将是永久的。
4、控制事务命令(oracle中事务是隐式开始的,结束时需要显示结束commit,rollback):
1、commit; 提交事务 作用:--事务结束
2、rollback; 回滚事务之前状态 作用:--事务结束
5、ORACLE事务隔离级别
1). READ COMMITTED :读取提交事务;允许存在幻读、不重复读。不存在脏读。(脏读ORACLE中不存在)
2).SERIALIZABLE:序列化级别;只能看见本事务开始前提交的数据,不存在幻读、不重复读、脏读。
3).READ ONLY :只读事务;是序列化级别的子集,也只能看见本事务开始前提交的数据,但不允许在事务中进行DML语句
ORACLE中事务级别只存在以上三种,其中READ COMMITTED 默认级别。 标准SQL事务级别为5种(想具体了解查询百度)。
6、设置事务隔离级别语法:
SET transaction isolation level [read commited | serializable] --设置读提交事务和序列化级别
SET transaction isolation level read only; --设置只读事务
7、事务处理演练(就以本机存在的classes表为例):
1、读提交事务和序列化事务级别进行事务处理
会话1:
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
SQL> insert into classes values(4,'0904');
1 row inserted
--以上是会话1新增一条数据,但未提交事务。下面执行会话2查询该表操作
会话2
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
--会话2查询结果集中,没有查到事务1新增未提交的数据,因为oracle默认的是读取提交后事务 READ COMMITED,也就是避免了脏读,ORACLE也就不存在脏读
会话1:提交事务
SQL> commit;
Commit complete
事务2再次执行查询语句:
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0904
--会话2中包含了事务1提交的数据,发生了幻读
会话1:删除刚新增的一条记录并提交事务
SQL> delete from classes where cid=4;
1 row deleted
SQL> commit;
Commit complete
会话2:再次执行查询语句
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
--会话2查询结果与之前查询结构不一致,未包含cid=4数据。发生了不可重复读。
会话2:为会话2设置事务,级别为:序列化级别
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
SQL> SET transaction isolation level serializable;
Transaction set
会话1:新增一条数据并提交
SQL> insert into classes values(4,'0904');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0904
会话2:进行再次执行查询语句
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
--在会话2中执行查询语句,结果中未包含事务1新增数据,既看不到其他事务所做的修改,避免了幻读。对当前事务提交(结束),再次执行查询语句就可看到事务1新增的数据行。
会话2提交事务:
SQL> commit;
Commit complete
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0904
会话2:再次设置事务级别为序列化级别
SQL> SET transaction isolation level serializable;
Transaction set
会话1:修改cid=4数据内容并提交
SQL> update classes set cname='0000' where cid=4;
1 row updated
SQL> commit;
Commit complete
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0000 --此条记录已被永久修改
会话2:再次执行查询SQL
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0904
--会话2执行查询语句,结果中看不到会话1中更改的数据,既看不到其他事务所修改的数据,避免了不可重复读。
————————————————————————————————————————————————————————————————————————————
使用只读级别进行事务处理:
会话2:将事务2设置为只读级别
SQL> SET transaction read only ;
Transaction set
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
会话1:新增一条数据并提交
SQL> insert into classes values(4,'0904');
1 row inserted
SQL> commit;
Commit complete
会话2:执行查询SQL结果
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
--会话2中执行查询语句,结果中未包含会话1新增的数据,既看不到其他事务所做的修改,避免了幻读。对当前事务进行提交,再将事务级别设置为只读事务
SQL> commit;
Commit complete
SQL> SET transaction read only ;
Transaction set
会话1:更新一条记录并提交
SQL> update classes set cname='0000' where cid=4;
1 row updated
SQL> commit;
Commit complete
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0000
会话2:执行查询语句
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0904
--会话2中查询结果看不到会话1更改的数据,既看不到其他事务所做的修改。避免了不可重复读。对当前事务进行提交。再将事务级别设置为可读取级别
事务2:设置为可读取级别,执行修改数据操作。
SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0000
SQL> SET transaction read only ;
Transaction set
SQL> update classes set cname='1111' where cid=4;
update classes set cname='1111' where cid=4
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作
--ORACLE可读事务只能查询,不能做修改才做所以报错。

MySQL은 초보자가 데이터베이스 기술을 배우는 데 적합합니다. 1. MySQL 서버 및 클라이언트 도구를 설치하십시오. 2. SELECT와 같은 기본 SQL 쿼리를 이해하십시오. 3. 마스터 데이터 작업 : 데이터를 만들고, 삽입, 업데이트 및 삭제합니다. 4. 고급 기술 배우기 : 하위 쿼리 및 창 함수. 5. 디버깅 및 최적화 : 구문 확인, 인덱스 사용, 선택*을 피하고 제한을 사용하십시오.

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

MySQL은 웹 개발에 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 주요 기능에는 다음이 포함됩니다. 1. 다른 시나리오에 적합한 InnoDB 및 MyISAM과 같은 여러 스토리지 엔진을 지원합니다. 2.로드 밸런싱 및 데이터 백업을 용이하게하기 위해 마스터 슬레이브 복제 기능을 제공합니다. 3. 쿼리 최적화 및 색인 사용을 통해 쿼리 효율성을 향상시킵니다.

SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
