搜索
首页数据库mysql教程Oracle 事务总结

1、事务概念: 概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制

1、事务概念:  
 概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么完全成功执行,完成整个工作单元操作,要么一点也不执行。  
  主要特性:确保数据库的完整性。  
2、事务的ACID特性  
  对一组SQL语句操作构成事务,数据库操作系统必须确保这些操作的原子性,一致性,隔离性,持久性.  
1、  原子性(Atomicity)  
    事务的原子性是指事务中包含的所有操作要么全做,要么不做,也就是说所有的活动在数据库中要么全部反映,要么全部不反映,以保证数据库的一致性。  
2、  一致性(Consistency)  
    事务的一致性是指数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束。  
3、  隔离性(Isolation)  
   隔离性是指数据库允许多个并发的事务同时对其中的数据进行读写或修改的能力,隔离性可以防止多个事务的并发执行时,由于它们的操作命令交叉执行而导致数据的不一致性。  
4、  持久性(durability)  
    事务的持久性是指在事务处理结束后,它对数据的修改应该是永久的。即便是系统在遇到故障的情况下也不会丢失,这是数据的重要性决定的。   
  
 
3、事务的控制语句  
   在Oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的,也就是说在oracle中,用户不可以显示使用命令来开始一个事务.oracle任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务的隐式开始。但是当用户想要终止一个事务处理时,必须显示使用commit和rollback语句结束。  
  根据事务ACID属性,oracle提供了如下的事务控制语句:  
   Set transaction 设置事物属性  
   Set constrains  设置事物的约束模式  
   约束模式是指:在事务中修改数据时,数据库中的约束立即应用于数据,还是将约束推迟到当前事务结束后应用。  
   Savepoint 在事务中建立一个存储的点.当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点.然后从该存储点重新执行。  
   Release  savepoint  删除存储点  
   Rollback 回滚事务 取消对数据库所作的任何操作  
   Commit 提交事务 对数据库的操作做持久的保存。  
 
 
  3、1设置事物的属性:  
  set transaction语句可用来设置事物的各种属性。该语句必须放在事务处理的第一个语句.  
也就是说,必须在任何insert、update 、delete语句以及其他的事务处理。  
  Set transaction的语句可以让用户对事务的以下属性进行设置  
    指定事务的隔离层  
    规定回滚事务所使用的存储空间  
    命名事务  
 备注:在使用set transaction语句设置属性时,对于规定回滚事务所使用的存储空间的设置很少使用.对于命名事务也非常简单,只有在分布式事务处理中才会体现出命名事务的用途.  
 
 注意:set transaction只对当前事务有效,事务终止,事务当前的设置将会失效。  
 
1、  数据异常  
事务的隔离性定义了一个事务与其它事务的隔离程度.为了更好的理解隔离层,首先讨论一下并发事务对同一个数据库进行访问可能发生的情况.在并发事务中总体来说会发生如下3种情况  
    错读 |脏读  
    非重复读取|不可重复读  
    假读|幻读  
 
    错读|脏读:当一个事务修改数据时,另一事务读取了该数据,但是第一事务由于某种原因取消对数据修改,使数据返回了原状态,这是第二个事务读取的数据与数据库中数据不一致.这就叫错读。  
 
   非重复读取:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。  
 
   假读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。  
 
    事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。  
2、  选择隔离层  
   针对3中读取的数据时产生的不一致现象,在ANSI SQL标准92中定义了4个事务的隔离级别.如下图所示:  
隔离层 错读|脏读   非重复读取|不可重复读 假读|幻读  
READ UNCOMMITTED(非提交读)  是   是   是  
READ COMMITTED(提交读) 否   是   是  
Repeatable READ(可重复读)   否   否   是  
Serializable(串行读)   否   否   否  
 
Oracle支持上述四种隔离层中的两种:read committed 和serializable。除此之外oralce中还定义read only 和 read write隔离层。  
 Read committed 这是oracle默认的隔离层。  
Serializable:设置事物的隔离层位它时,事务与事务之间完全隔开,事务以串行的方式执行,这并不是说一个事务必须结束才能启动另外一个事务,而是说这些事务的执行的结果于一次执行的事务的结果一致。  
 
Read only和 read write 当使用read only时,事务中不能有任何修改数据库中数据的操作语句,这包括 insert、update、delete、create语句。Read only是serializable的一个子集,区别是read only 只读,而serialzable可以执行DML操作。Read write它是默认设置,该选项表示在事务中可以有访问语句、修改语句.但不经常使用.  
 
 
 
3、  建立set transaction的语句  
 列举如下:  
  Set transaction read only  
  Set transaction read write  
  Set transaction isolation level read committed  
  Set transaction isolation level serializable  
 
注意:这些语句是互斥的.即不能够同时设置两个或者两个以上的选项。  
 
 
4、  结束事务:  
什么情况下代表事务的结束呢?  
     
1、  Commit 提交事务  
2、  rollback 回滚事务    
 
//只读的案例  
SQL> set transaction read only;  
   
Transaction set  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  redarmy          陈红军                                   
   
SQL> update users set password='123' where username='mj';  
   
update users set password='123' where username='mj' 
   
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作  
 
//脏读的案例  
SQL> set transaction isolation level read committed;  
   
Transaction set  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  redarmy          陈红军                                   
   
SQL> update users set password='123' where username='mj';  
   
1 row updated  
   
SQL> select * from users where username='mj';  
   
USERNAME      PASSWORD      NAME             ADDRESS             ZIP  
-------------------- -------------------- -------------------- -------------------- -------  
mj                  123                 陈红军                                   
   
SQL> rollback;  
 
 
以上内容归redarmy_chen创建,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com 

linux

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL中的存储过程是什么?MySQL中的存储过程是什么?May 01, 2025 am 12:27 AM

存储过程是MySQL中的预编译SQL语句集合,用于提高性能和简化复杂操作。1.提高性能:首次编译后,后续调用无需重新编译。2.提高安全性:通过权限控制限制数据表访问。3.简化复杂操作:将多条SQL语句组合,简化应用层逻辑。

查询缓存如何在MySQL中工作?查询缓存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查询缓存的工作原理是通过存储SELECT查询的结果,当相同查询再次执行时,直接返回缓存结果。1)查询缓存提高数据库读取性能,通过哈希值查找缓存结果。2)配置简单,在MySQL配置文件中设置query_cache_type和query_cache_size。3)使用SQL_NO_CACHE关键字可以禁用特定查询的缓存。4)在高频更新环境中,查询缓存可能导致性能瓶颈,需通过监控和调整参数优化使用。

与其他关系数据库相比,使用MySQL的优点是什么?与其他关系数据库相比,使用MySQL的优点是什么?May 01, 2025 am 12:18 AM

MySQL被广泛应用于各种项目中的原因包括:1.高性能与可扩展性,支持多种存储引擎;2.易于使用和维护,配置简单且工具丰富;3.丰富的生态系统,吸引大量社区和第三方工具支持;4.跨平台支持,适用于多种操作系统。

您如何处理MySQL中的数据库升级?您如何处理MySQL中的数据库升级?Apr 30, 2025 am 12:28 AM

MySQL数据库升级的步骤包括:1.备份数据库,2.停止当前MySQL服务,3.安装新版本MySQL,4.启动新版本MySQL服务,5.恢复数据库。升级过程需注意兼容性问题,并可使用高级工具如PerconaToolkit进行测试和优化。

您可以使用MySQL的不同备份策略是什么?您可以使用MySQL的不同备份策略是什么?Apr 30, 2025 am 12:28 AM

MySQL备份策略包括逻辑备份、物理备份、增量备份、基于复制的备份和云备份。1.逻辑备份使用mysqldump导出数据库结构和数据,适合小型数据库和版本迁移。2.物理备份通过复制数据文件,速度快且全面,但需数据库一致性。3.增量备份利用二进制日志记录变化,适用于大型数据库。4.基于复制的备份通过从服务器备份,减少对生产系统的影响。5.云备份如AmazonRDS提供自动化解决方案,但成本和控制需考虑。选择策略时应考虑数据库大小、停机容忍度、恢复时间和恢复点目标。

什么是mySQL聚类?什么是mySQL聚类?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何优化数据库架构设计以在MySQL中的性能?如何优化数据库架构设计以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中优化数据库模式设计可通过以下步骤提升性能:1.索引优化:在常用查询列上创建索引,平衡查询和插入更新的开销。2.表结构优化:通过规范化或反规范化减少数据冗余,提高访问效率。3.数据类型选择:使用合适的数据类型,如INT替代VARCHAR,减少存储空间。4.分区和分表:对于大数据量,使用分区和分表分散数据,提升查询和维护效率。

您如何优化MySQL性能?您如何优化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器