찾다
데이터 베이스MySQL 튜토리얼概念回忆数据库事务

概念回忆数据库事务

Jun 07, 2016 pm 02:59 PM
acid사무콘텐츠기억하다데이터 베이스개념특징

本文内容 事务 ACID 特征 并发调度——隔离级别 加锁机制 加锁协议 数据库事务,简称事务,是一组按顺序执行的操作单元。 事务 ACID 特征 事务有四个特征,称为 ACID: 原子性(Atomic)- 事务必须同时成功或同时失败。 比如,ATM 取钱和记入客户账户是一个

本文内容

  • 事务 ACID 特征
  • 并发调度——隔离级别
  • 加锁机制
  • 加锁协议

数据库事务,简称事务,是一组按顺序执行的操作单元。

 

事务 ACID 特征


事务有四个特征,称为 ACID:

  • 原子性(Atomic)- 事务必须同时成功或同时失败。

比如,ATM 取钱和记入客户账户是一个原子事务。如果 ATM 只是吐出钱,而未记入账户,或是已记入账户,但没有吐出钱。这两种情况都是不允许的。

  • 一致性(Consistency)- 事务必须遵循某个规则或法律协议系统。简单说,就是符合我们的所有期望。

事务必须以一种遵循系统规则的方式,成功地选择、插入、更新或删除记录。不遵循规则的事务,不能提交。如果没有绝对的规则,则持久性(数据完整性)将没有保证。比如,航班数据库,一个座位不能分配给两名不同的乘客。这就是一个一致性。在事务处理过程中的某个时刻,乘客之间可能需要调换座位,这可能会违背这个约束。但事务结束后,事务必须保证数据库满足所有的一致性条件。

  • 隔离性(Isolation)- 用户不能看到其他用户的事务,直到那些事务全部完成并提交。

事务并发时,一个事务不应影响其他事务。事务之间是隔离的。比如,两个机票售票口,正在出售同一个航班的座位,而该航班只剩下一个座位,那么,只能满足一个售票口的请求,而拒绝另一个。如果由于并发操作而导致同一个座位卖给了两位乘客,或是没卖出去,都是不允许的。

  • 持久性(Durability)- 事务必须持久有效。

事务一旦被提交,即使系统出现故障,也要保证事务的结果不能丢失。许多灾难性条件可能导致记录无法永久性保存到磁盘,包括电源、网络、系统和硬盘等设备的失败。数据丢失还可能由于心怀不满的员工或黑客的恶意操作引起。

但是,持久性不是自动化过程。DBA的主要职责之一就是创建并维护数据恢复策略。

James Nicholas Gray、Theo Haerder 和 Andreas Reuter 这三人为术语“数据库 ACID 测试”做出了很大贡献。

  • James Nicholas Gray。他早在 1981 年,就为 Tandem Computers, Inc. 公司编写了白皮书 "The Transaction Concept: Virtues and Limitations"。在这篇文章中,Gray 认为事务应该是合法的、绑定的,并且必须具备如下特征:一致性、原子性、持久性。最后,他大致定义了提交(commit)、回滚(rollback)、取消(undo)和重做(redo)日志文件。这篇文章在当时很有前瞻性的,对现代数据库系统的影响非常显著。
  • Theo Haerder 和 Andreas Reuter 为美国计算机协会(Association for Computing Machinery,ACM)写了一篇后续文章,题为 "Principles of Transaction-Oriented Database Recovery"。在这篇文章中,他们进一步扩展了 Gray的思想,增加了“事务必须相互隔离”的思想。新的事物特性如下:原子性、一致性、隔离性、持久性。

 

并发调度——隔离级别


如果对并发操作不进行合理调度,那么,会破坏事务 ACID 特性。可能会带来如下问题:

  • 影子读取(丢失修改):一个事务读取了另一个事务已提交的数据。

例如,假设,两个事务 T1 和 T2:

事务 T1 和 T2 都从数据库读入同一记录,并各自修改数据,在两个事务都完成了读入数据的操作以后,T1 先完成修改操作,并将更新的数据写回数据库。

随后,T2 也完成了修改,并将结果写回数据库,这样就覆盖了 T1 的操作结果,导致 T1 对该数据的修改好像从未发生过。

这种情形称为“丢失修改”。

  • 脏读取(dirty read):一个事务读取了未提交的事务。

例如,假设,两个事务 T1 和 T2:

事务 T1 修改了某个数据,并将其写回数据库。事务 T2 随之读入这个被 T1 修改过的数据,之后 T1 出于某种原因又撤销了,它所修改的数据被恢复。

这时,T2 所读取的数据就与数据库中的数据不同。

这种情形称为“脏读取”。

  • 不可重复读取(non-repeatable read):一个事务多次读取同一个数据的返回结果不同。

例如,假设,两个事务 T1 和 T2:

事务 T1 按一定条件从数据库读取某些数据。随后,事务 T2 对其进行修改,并将其结果写回数据库。当 T1 再次按同一条件读取数据时,结果发现已经跟刚才不一样了。有些可能发生改变,有些可能已经删除,还可能增加了某些数据。

这种情况称为“不可重复读取”。

为了解决事务之间并发带来的问题,必须在事务之间建立隔离关系。如果应用程序使用完全隔离的事务,那么,同时执行多个事务的效果将完全等效于串行(一个接一个地)执行。隔离级别如下表所示。

隔离级别

脏读

不可重复读取

影子读取

描述

可序列化

(SERIALIZABLE)

不可能

不可能

不可能

最严格的级别。事务串行执行,资源消耗最大

可重复读取

(REPEATABLE READ)

不可能

不可能

可能

读取数据的事务允许其他事务继续访问该行数据,但未提交的写事务将会禁止其他事务访问该行。避免“脏读取”和“不可重复读取”,只是带来更多的性能损失

未提交读取

(READ UNCOMMITED)

不可能

可能

可能

最低的事务隔离级别,保证读取过程中不会读取到非法数据

 

提交读取

(READ COMMITTED)

 

可能

可能

可能

大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统

 

加锁机制


数据库采用锁机制来实现事务隔离。

  • 共享锁(share lock,S 锁,读锁):共享锁用于读取数据操作,它允许其他事务同时读取某锁定的资源,但不允许其他事务更新它——可以读,但不能改。

例如,事务 T 对数据 A 加了 S 锁,则 T 就可以对 A 进行读取,但不能修改;在 T 释放 A 上的 S 锁前,其他事务可以再对 A 加 S 锁,但不能加 X 锁,这样,可以读取 A,但不能修改 A。

  • 排他锁(exclusive lock,X 锁,写锁):排它锁用于修改数据的场合。它锁定的资源,其他事务不能读取也不能修改——读都不让,更不用说改。

例如,若事务 T 对数据 A 加了 X 锁,则 T 就可以对 A 进行读取,以及修改 A;在 T 释放 A 上的 X 锁前,任何事务都不能对 A 加任何类型的锁,这样也就不能读取和修改 A。

 

加锁协议


为了保证并发控制的正确性,在使用加锁机制时,必须遵循一定原则,如何时申请 X 锁或 S 锁,何时释放锁等。不同的加锁协议(locking protocol)约定不同——保证数据一致性的三级锁协议和保证并行调度的两段锁(two-phase locking)协议,为并发提供不同程度的保证。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL의 역할 : 웹 응용 프로그램의 데이터베이스MySQL의 역할 : 웹 응용 프로그램의 데이터베이스Apr 17, 2025 am 12:23 AM

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

MySQL : 첫 번째 데이터베이스 구축MySQL : 첫 번째 데이터베이스 구축Apr 17, 2025 am 12:22 AM

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

MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식Apr 17, 2025 am 12:21 AM

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

MySQL 초보자가 친숙합니까? 학습 곡선 평가MySQL 초보자가 친숙합니까? 학습 곡선 평가Apr 17, 2025 am 12:19 AM

MySQL은 다음과 같은 초보자에게 적합합니다. 1) 설치 및 구성이 쉽고, 2) 풍부한 학습 리소스, 3) 직관적 인 SQL 구문, 4) 강력한 도구 지원. 그럼에도 불구하고 초보자는 데이터베이스 디자인, 쿼리 최적화, 보안 관리 및 데이터 백업과 같은 과제를 극복해야합니다.

SQL은 프로그래밍 언어입니까? 용어를 명확하게합니다SQL은 프로그래밍 언어입니까? 용어를 명확하게합니다Apr 17, 2025 am 12:17 AM

예, sqlisaprogramminglanguages-pecializedfordatamanagement.1) 그것은 초점을 맞추고, 초점을 맞추고, 초점을 맞추고, sqlisessentialforquerying, 삽입, 업데이트 및 adletingdataindataindationaldatabase.3) weburer infriendly, itrequires-quirestoamtoavase

산성 특성 (원자력, 일관성, 분리, 내구성)을 설명하십시오.산성 특성 (원자력, 일관성, 분리, 내구성)을 설명하십시오.Apr 16, 2025 am 12:20 AM

산성 속성에는 원자력, 일관성, 분리 및 내구성이 포함되며 데이터베이스 설계의 초석입니다. 1. 원자력은 거래가 완전히 성공적이거나 완전히 실패하도록합니다. 2. 일관성은 거래 전후에 데이터베이스가 일관성을 유지하도록합니다. 3. 격리는 거래가 서로를 방해하지 않도록합니다. 4. 지속성은 거래 제출 후 데이터가 영구적으로 저장되도록합니다.

MySQL : 데이터베이스 관리 시스템 대 프로그래밍 언어MySQL : 데이터베이스 관리 시스템 대 프로그래밍 언어Apr 16, 2025 am 12:19 AM

MySQL은 데이터베이스 관리 시스템 (DBMS) 일뿐 만 아니라 프로그래밍 언어와 밀접한 관련이 있습니다. 1) DBMS로서 MySQL은 데이터를 저장, 구성 및 검색하는 데 사용되며 인덱스 최적화는 쿼리 성능을 향상시킬 수 있습니다. 2) SQL과 같은 ORM 도구를 사용하여 Python에 내장 된 SQL과 프로그래밍 언어를 결합하면 작업을 단순화 할 수 있습니다. 3) 성능 최적화에는 인덱싱, 쿼리, 캐싱, 라이브러리 및 테이블 부서 및 거래 관리가 포함됩니다.

MySQL : SQL 명령으로 데이터 관리MySQL : SQL 명령으로 데이터 관리Apr 16, 2025 am 12:19 AM

MySQL은 SQL 명령을 사용하여 데이터를 관리합니다. 1. 기본 명령에는 선택, 삽입, 업데이트 및 삭제가 포함됩니다. 2. 고급 사용에는 조인, 하위 쿼리 및 집계 함수가 포함됩니다. 3. 일반적인 오류에는 구문, 논리 및 성능 문제가 포함됩니다. 4. 최적화 팁에는 인덱스 사용, 선택*을 피하고 한계 사용이 포함됩니다.

See all articles

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

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

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구