博客
关于我
数据库之事务
阅读量:531 次
发布时间:2019-03-08

本文共 1243 字,大约阅读时间需要 4 分钟。

事务管理与并发控制

1. 事务的概念

事务(Transaction)是数据库环境下由一组数据库操作序列组成的逻辑工作单元。这些操作应是一个不可分割的整体,要么全做要么全不做。事务的执行应保证将数据库从一个一致状态转变成另一个一致状态,而在此过程中不必保证数据的一致性。

2. 事务的执行机制

事务通常以 BEGIN TRANSACTION 开始,以 COMMITROLLBACK 结束。COMMIT 表示提交事务的所有操作,将事务中所有对数据库的更新写回磁盘。ROLLBACK 表示回滚,将事务中已完成的操作全部撤消,恢复到事务开始时的状态。

3. 事务的性质

A. 原子性(Atomicity)

事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做,确保数据库的状态始终保持一致。

C. 一致性(Consistency)

事务执行后必须使数据库从一个一致性状态变为另一个一致性状态。在故障发生时,系统会回滚,确保数据库恢复到一致状态。

I. 隔离性(Isolation)

一个事务的执行不能被其他事务干扰,保证了数据的独立性,避免并发操作带来的数据不一致性。

D. 持续性(Durability)

事务提交后,所有更新必须写入数据库,对其他操作无影响,确保数据持久性。

4. 事务的操作

Read(X)

从数据库中将数据对象读入事务局部缓冲区。

Write(X)

将数据对象从事务局部缓冲区写入数据库。

5. 事务的状态

活动状态

事务开始执行后处于此状态,可执行读、写操作。

部分提交状态

事务结束前进入此状态。

失败状态

事务因故障或被撤销而进入此状态。

提交状态

事务已成功提交,进入该状态才能认为事务已完成。

中止状态

数据库恢复到事务开始前的状态,事务处于中止状态。

6. 事务故障

没有提交的事务可能已写入数据库,或部分更新未完成。

恢复方法

利用事务日志撤销未完成操作,重做已提交操作。

7. 数据库恢复技术

backup(备份)

分全备份、增量备份等方式进行数据保护。

事务日志

记录事务更新操作,用于故障恢复。

恢复方法

根据故障类型选择恢复方案,确保数据一致性。

8. 并发控制

读脏数据

一个事务修改数据后,另一个事务读取已修改的数据。

丢失修改

并发事务可能导致修改数据未能提交。

不可重复读

事务可能读取到第一个事务修改数据后的数据。

并发控制方法

使用锁机制和并发控制协议,确保数据一致性。

9. 锁机制

排它锁(X锁)

防止其他事务修改被加锁数据,确保数据一致性。

共享锁(S锁)

允许多个事务读取数据,但防止修改。

更新锁(U锁)

允许多个事务读取数据,但防止修改。

10. 加锁协议

一级加锁

事务在修改前加 X锁,全锁保护。

两段锁协议

分封锁和收缩阶段进行锁管理。

11. 防止死锁

一是优化加锁顺序

避免矛盾加锁,防止死锁。

二是死锁检测

及时发现死锁,进行恢复处理。

通过上述措施,可以有效管理并发事务,确保数据库的高并发运行。

转载地址:http://eglnz.baihongyu.com/

你可能感兴趣的文章
php+JQ+EasyUI自动加载数据
查看>>
php+sql server根据自增序号id区间查询第几条到第几条的数据
查看>>
php--------获取当前时间、时间戳
查看>>
Redis使用场景举例
查看>>
php--正则表达式
查看>>
php--防止sql注入的方法
查看>>
PHP-CGI Windows平台远程代码执行漏洞复现(CVE-2024-4577)
查看>>
php-cgi耗尽报502错误
查看>>
php-cgi(fpm-cgi) 进程 CPU 100% 与 file_get_content...
查看>>
PHP-DI/Invoker 开源项目使用教程
查看>>
php-fpm与Nginx运行常见错误说明
查看>>
php-fpm比php成为apache模块好在哪
查看>>
php-fpm超时时间设置request_terminate_timeout分析
查看>>
php-fpm进程数优化
查看>>
PHP-GD库-分类整理
查看>>
php-laravel框架用户验证(Auth)模块解析(一)
查看>>
php-laravel框架用户验证(Auth)模块解析(三)登录模块
查看>>
php-laravel框架用户验证(Auth)模块解析(二)注册模块
查看>>
php-laravel框架用户验证(Auth)模块解析(四)忘记密码
查看>>
php-redis中文参考手册_Ping_echo_set_get_setex_psetex_...
查看>>