>  기사  >  데이터 베이스  >  데이터베이스 트랜잭션 처리에 관한 몇 가지 문제 요약

데이터베이스 트랜잭션 처리에 관한 몇 가지 문제 요약

王林
王林원래의
2019-08-19 11:05:491673검색

mysql 트랜잭션 처리에 대한 요약:

1. 트랜잭션이란 무엇입니까?

MySQL 트랜잭션은 주로 대규모 작업과 복잡성이 높은 데이터를 처리하는 데 사용됩니다.

예를 들어 인사관리 시스템에서 사람을 삭제하면 그 사람의 기본 정보도 삭제해야 하고, 편지함, 글 등 그 사람과 관련된

정보도 삭제해야 합니다. , 이러한 데이터베이스 작업 문은 트랜잭션을 구성합니다!

2. 트랜잭션 사용 조건

MySQL에서 트랜잭션을 사용하려면 MySQL에서 트랜잭션을 지원하는 스토리지 엔진의 지원이 필요합니다. > 및 NDB cluster,InnoDBNDB cluster,

第三方的存储引擎有PBXTXtrDB.

3、事务有什么特点

3-1、原子性

一个事务必须被作为一个不可分割的最小工作单元,每个事务中的所有操作必须要么成功,或者要么失败,

永远不可能一些操作失败,一些操作成功,这就是所谓的原子性的概念.

3-2、一致性

一致性就像上面举的一个例子一样,当发生异常情况下,数据仍然是正确的.就是说当一个事务执行失败了,

数据之间是不会受异常的情况而影响,永远保持着他的正确性.

3-3、隔离性

当一个事务还未提交,每个事务之间是相互隔离的,互不受到影响.

3-4、持久性

当一个事务进行提交之后,发生的变化就会永远保存在数据库中.

4、事务的隔离级别

4-1、未提交读

一个事务中对数据所做的修改,即使没有提交,这个修改对其他的事务仍是可见的,这种情况下就容易出现脏读,影响了数据的完整性.

4-2、读提交

一个事务开始时,只能看见其他已经提交过的事务.这种情况下容易出现不可重复读(两次读的结果不一样).

4-3、可重复读

多次读取记录的结果都是一致的,可重复读可以解决上面的不可重复读的情况.但是有这样一种情况,

当一个事务在读取某个范围的记录时,另外一个事务在这个范围内插入了一条新的数据,当事务再次进行读取数据时,

发现比第一次读取记录多了一条,这就是所谓的幻读,两次读取的结果不一致.

4-4、可串行

串行就像一个队列一个样,每个事务都是排队等候着执行,只有前一个事务提交之后,下一个事务才能进行操作.

这种情况虽然可以解决上面的幻读,但是他会在每一条数据上加一个锁,容易导致大量的锁超时和锁竞争,

特别不适用在一些高并发的业务场景下.

4-5、隔离性总结

通过上面的举例,我们不难发现.脏读和不可重复读重在更新数据,然后幻读重在插入数据.

5、多种存储引擎时事务的处理方式

根据上面事务使用的条件,我们可以得知有的存储引擎是不支持事务的,例如MyISAM存储引擎就不支持.

那如果在一个事务中使用了事务性的存储引擎和非事务性的存储,提交是可以正常进行,

但是回滚非事务性的存储引擎则会显示响应的错误信息,具体信息和存储引擎有关.

6、如何使用事务

MySQL中事务隐式开启的,也就是说,一个sql语句就是一个事务,当sql语句执行完毕,事务就提交了.在演示的过程中,我们显式开启.

7、mysql的自动提交

上面提到了MySQL中事务是隐式开启的,则代表我们每一个sql是自动提交的,需要关闭则需要设置autocommit

타사 스토리지 엔진에는 PBXTXtrDB가 포함됩니다.

3. 트랜잭션의 특징은 무엇입니까


3-1. 원자성

트랜잭션은 분할할 수 없는 최소 작업 단위로 간주되어야 합니다. 각 트랜잭션의 모든 작업은 성공하거나 실패해야 합니다.

🎜일부에게는 불가능합니다. 🎜🎜🎜3-2. 일관성 🎜🎜🎜일관성은 예외가 발생해도 여전히 정확합니다. 즉, 트랜잭션 실행이 실패하더라도🎜🎜데이터는 비정상적인 상황에 영향을 받지 않고 항상 정확성을 유지합니다.🎜🎜🎜3-3. 트랜잭션이 아직 완료되지 않은 경우 🎜🎜🎜3-4. 내구성 🎜🎜🎜트랜잭션이 제출되면 변경 사항이 데이터베이스에 영원히 저장됩니다. 격리 수준 🎜🎜🎜🎜4-1. 커밋되지 않은 읽기🎜🎜🎜한 트랜잭션의 데이터 수정 사항은 커밋되지 않더라도 다른 트랜잭션에서 계속 볼 수 있습니다. 데이터 무결성이 보장됩니다. 🎜🎜🎜4-2. 읽기 제출 🎜🎜🎜트랜잭션이 시작되면 제출된 다른 트랜잭션만 볼 수 있습니다. 이 경우 반복 불가능한 읽기가 발생하기 쉽습니다. 두 번 읽은 결과가 다름).🎜🎜🎜4-3.반복 읽기🎜🎜🎜기록을 여러 번 읽은 결과는 일관됩니다. 그런데 위와 같은 반복 읽기가 불가능한 상황이 있습니다. 상황🎜🎜트랜잭션이 특정 범위의 레코드를 읽을 때 다른 트랜잭션이 이 범위에 새로운 데이터를 삽입하는 경우, 트랜잭션이 해당 데이터를 다시 읽을 때 처음보다 레코드가 하나 더 있음을 발견합니다. 이것은 소위 팬텀 읽기(phantom read)입니다. 🎜🎜🎜4-4. 직렬화 가능 🎜🎜🎜Serial은 대기열에 있고 실행을 기다리고 있습니다. 이전 트랜잭션 제출 후 다음 트랜잭션이 실행될 수 있습니다. 🎜🎜이 상황은 위의 팬텀 읽기를 해결할 수 있지만 각 데이터에 잠금을 추가하므로 많은 잠금 시간 초과 및 잠금 경쟁이 쉽게 발생할 수 있습니다. 🎜🎜은 특히 동시성이 높은 일부 비즈니스 시나리오에서는 적용되지 않습니다. 🎜🎜🎜4-5. 격리 요약🎜🎜🎜위의 예를 통해 더티 읽기와 반복 불가능한 읽기가 데이터 업데이트에 중점을 두고 있다는 것을 쉽게 알 수 있습니다. .🎜🎜🎜5. 여러 스토리지 엔진으로 트랜잭션을 처리하는 방법🎜🎜🎜위의 트랜잭션 사용 조건에 따르면 MyISAM과 같은 일부 스토리지 엔진은 트랜잭션을 지원하지 않음을 알 수 있습니다. 스토리지 엔진은 지원하지 않습니다.🎜🎜트랜잭션 스토리지 엔진과 비트랜잭션 스토리지를 함께 사용하면 커밋은 정상적으로 진행될 수 있지만🎜🎜비트랜잭션 스토리지 엔진을 롤백하면 응답이 표시됩니다. 오류 메시지, 특정 정보는 스토리지 엔진과 관련됩니다. 🎜🎜🎜 6. 트랜잭션 사용 방법 🎜🎜🎜 MySQL의 트랜잭션은 암시적으로 활성화됩니다. 즉, sql 문이 실행되면 트랜잭션입니다. , 트랜잭션이 제출되었습니다. 시연 중에 우리는 이를 명시적으로 활성화했습니다. 🎜🎜🎜7. MySQL 자동 제출 🎜🎜🎜위에서 언급했듯이 MySQL의 트랜잭션은 암시적으로 활성화됩니다. 즉, 각 SQL이 자동으로 제출됩니다. 꺼야 하고, autocommit 옵션을 설정해야 합니다.🎜🎜🎜8. 트랜잭션의 격리 수준을 설정합니다🎜🎜
set session transaction isolation level 隔离级别;
🎜위는 데이터베이스 트랜잭션 처리와 관련된 몇 가지 질문입니다. 더 많은 관련 질문을 보려면 PHP 중국어 웹사이트의 관련 기사를 방문하세요. 감사해요! 🎜🎜🎜추천 데이터베이스 관련 영상: 🎜https://www.php.cn/course/list/51/type/2.html🎜🎜

위 내용은 데이터베이스 트랜잭션 처리에 관한 몇 가지 문제 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.