首页 > 数据库 >肖sir ___数据库中事务

肖sir ___数据库中事务

时间:2022-11-19 15:57:17浏览次数:35  
标签:sir 事务 重复 数据库 回滚 提交 ___ 数据

一、什么是事务?
定义:事务就是一组具有原子性的操作,这一组操作要么全都正确执行,要么全都不执行。
事务能保证数据库从一种一致性状态转换为另一种一致性状态。
二、事务的四大特性
1. 原子性 原子性指的是事务是一个不可分割的操作,要么全都正确执行,要么全都不执行。
2. 一致性 事务开始前和事务结束后,数据库的完整性约束没有被破坏。
3. 隔离性 事务的执行是相互独立的,它们不会相互干扰,一个事务不会看到另一个正在运行过程中的事务的数据。
4. 持久性 事务结束后,事务的结果必须是永久保存的。即使数据库发生崩溃,在数据库恢复后事务提交的结果仍然不会丢失。
三、事务的高可靠性和高可靠性
事务只能保证数据库的高可靠性,即数据库本身发生问题后,事务提交后的数据仍然能恢复;而如果不是数据库本身的故障,如硬盘损坏了,那么事务提交的数据可能就丢失了。这属于高可用性的范畴。因此,事务只能保证数据库的高可靠性,而高可用性需要整个系统共同配合实现。
四、事务的分类
1. 扁平事务
它是实际生产环境中最常用、最简单的事务类型。
事务从BEGIN WORK开始,从COMMIT WORK或ROLLBACK WORK结束。
缺点:发生错误时回滚到事务的起始位置,无法回滚部分操作。而回滚所有的操作开销太大。
2. 带有保存点的扁平事务
这种事务能设置多个保存点,当发生错误时可以回滚到事务中指定的保存点,而不需要将整个事务回滚。
3. 链事务
4. 嵌套事务
5. 分布式事务
五、数据库并发访问会出现的问题
1. 更新丢失
当有两个并发执行的事务,更新同一行数据,那么有可能一个事务会把另一个事务的更新覆盖掉。
当数据库没有加任何锁操作的情况下会发生。
2. 脏读
一个事务读到另一个尚未提交的事务中的数据。
该数据可能会被回滚从而失效。
如果第一个事务拿着失效的数据去处理那就发生错误了。
3. 不可重复读
不可重复度的含义:一个事务对同一行数据读了两次,却得到了不同的结果。它具体分为如下两种情况:
a. 虚读:在事务1两次读取同一记录的过程中,事务2对该记录进行了修改,从而事务1第二次读到了不一样的记录。
b. 幻读:事务1在两次查询的过程中,事务2对该表进行了插入、删除操作,从而事务1第二次查询的结果发生了变化。
4、不可重复读与脏读的区别?
脏读读到的是尚未提交的数据,而不可重复读读到的是已经提交的数据,只不过在两次读的过程中数据被另一个事务改过了。
六、事务的隔离级别
数据库事务的隔离级别有4个,由低到高依次为
Read uncommitted 、
Read committed 、
Repeatable read 、
Serializable ,
这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。
1. Read uncommitted 读未提交
在该级别下,一个事务对一行数据修改的过程中,不允许另一个事务对该行数据进行修改,但允许另一个事务对该行数据读。
因此本级别下,不会出现更新丢失,但会出现脏读、不可重复读。
2. Read committed 读提交
在该级别下,未提交的写事务不允许其他事务访问该行,因此不会出现脏读;但是读取数据的事务允许其他事务的访问该行数据,因此会出现不可重复读的情况。
3. Repeatable read 重复读
在该级别下,读事务禁止写事务,但允许读事务,因此不会出现同一事务两次读到不同的数据的情况(不可重复读),且写事务禁止其他一切事务。
4. Serializable 序列化
该级别要求所有事务都必须串行执行,因此能避免一切因并发引起的问题,但效率很低。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
使用事务的注意事项
1. 不要在循环中提交事务
2. 不要使用自动提交
3. 不要使用自动回滚
4. 不要使用长事务

标签:sir,事务,重复,数据库,回滚,提交,___,数据
From: https://www.cnblogs.com/xiaolehong/p/16906249.html

相关文章

  • 钡铼技术提供工业4.0注塑机OPC UA升级解决方案
    如果你的工业应用或者设备支持OPCUA无疑会有广泛的适配性。OPCUA作为工业4.0中一个重要的通信协议(IEC62541),同样也是工业领域最有希望的连接标准。开放平台通讯一致架......
  • 2022-2023-1 20221322《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十一周作......
  • Python的线程如何理解
    Num01-->多线程threadingPython中建议使用threading模块,而不要使用thread模块。原因如下:1,Python中threading模块对thread进行了一些包装,可以更加方便的使用。2,Python......
  • CF1588F Jumping Through the Array
    linkSolutionmd,摆了一周,现在是彻底废了/kk可以看出的是这玩意是若干个个环,不过我们会发现,这个性质没有什么用。发现不好做,考虑操作分块。我们可以发现对于操作\(1\)......
  • DOM_Element对象以及Node对象
    DOM_Element对象Element:元素对象获取/创建:通过document来获取和创建方法:removeAttribute():删除属性setAttribute():添加新属性<body><......
  • 一次交通意外事故后保险总结
    一次交通意外事故后保险总结总结意外事故后进行医疗费用的报销主要有多种方式:强烈对剑工伤保险,如果能够获得认定,赔付标准最高.1.工伤保险,如果认定为工伤保险,是......
  • 前端面试题:移动端和PC端的区别?
    移动端与PC端主要的区别其实是兼容问题;移动端开发主要考虑的就是分辨率的适配,和不同操作系统的差异化。还有就是移动端的布局自适应;解决布局适应的方法有:rem,em,vw,v......
  • Ansible通知与处理机制
    一、Ansible通知与处理机制介绍notify键值对(通知)与handlers键值对(处理)当任务模块执行完毕后,任务的notifiy键值对将观察任务模块的执行是否对被管理主机进行了修改,并根据......
  • ESP32_IDF学习(1)--新建工程
    目录前言ESP32编译方式搭建ESP32编译环境修改官方快捷方式使用MobaXterm搭建终端常用命令汇总开始新项目创建新组件前言ESP32编译方式乐鑫官方提供的两种编译方式都是利......
  • 各类数据库写入Webhsell总结
    1.MySQL写入WebShell1.1写入条件数据库的当前用户为ROOT或拥有FILE权限;知道网站目录的绝对路径;PHP的GPC参数为off状态;MySQL中的secure_file_priv参数不能为NULL状态;......