数据库中的事物处理

数据库

  数据库的更新通常都是由客观世界的所发生的事件引起的。为保证数据库内容的一致,就要将数据库的一组操作作为一个整体来进行,要么全部成功完成,要么全部失败退出。如果由于故障或其它原因而使一组操作中有一些完成,有一些未完成,则必然会使得数据库中的数据出现不一致,从而使得数据库的完整性受到破坏。因此,更新操作序列必须作为一个整体在DBMS执行时出现,即“要么全做,要么全不做”。SQL提供了事务处理的机制,来帮助DBMS实现上述的功能。

事务处理

  事务处理(TRANSACTION)的每个语句是由一个或多个SQL语句序列结合在一起所形成的一个逻辑处理单元。事务处理中句都是完成整个任务的一部分工作,所有的语句组织在一起能够完成某一特定的任务。DBMS在对事务处理中的语句进行处理时,是按照下面的约定来进行的,这就是“事务处理中的所有语句被作为一个原子工作单位,所有的语句既可成功地被执行,也可以没有任何一个语句被执行”。DBMS负责完成这种约定,即使在事务处理中应用程序异常退出,或者是硬件出现故障等各种意外情况下,也是如此。在任何意外情况下,DBMS都负责确保在系统恢复正常后,数据库内容决不会出现“部分事务处理中的语句被执行完”的情况。

sql语言

  sql语言为事务处理提供了两个重要的语句,它们是COMMIT和ROLLBACK语句。它们的使用格式是:

  COMMIT WORK

  ROLLBACK WORK

  COMMIT语句用于告诉DMBS,事务处理中的语句被成功执行完成了。被成功执行完成后,数据库内容将是完整的。而ROLLBACK语句则是用于告诉DBMS,事务处理中的语句不能被成功执行。这时候,DBMS将恢复本次事务处理期间对数据库所进行的修改,使之恢复到本次事务处理之前的状态。

?事务处理:

?QSqlDatabase::database().transaction();

?QSqlQuery query;

?query.exec("SELECT id FROM employee WHERE name = ‘Torild Halvorsen‘");

?if (query.next())

?{

?    int employeeId = query.value(0).toInt();

?    query.exec("INSERT INTO project (id, name, ownerid) "

?               "VALUES (201, ‘Manhattan Project‘, "

?               + QString::number(employeeId) + ")");

?}

?QSqlDatabase::database().commit();

?如果数据库引擎支持事务处理,则函数QSqlDriver::hasFeature(QSqlDriver::Transactions)将返回 真。

?可以通过调用QSqlDatabase::transaction()来初始化一个事务处理。之后执行你想在该事务处理的工作。

?完了再执行QSqlDatabase::commit()来提交事务处理或QSqlDatabase::rollback()取消事务处理。

时间: 2024-12-24 19:26:12

数据库中的事物处理的相关文章

数据库中的事物

概念:在数据中事务是工作的逻辑单元,一个事务是有一个获多个完成一组的相关行为的Sql语句组成.通过事务机制确保这一组sql语句所作的操作要么完全执行成功,要么一点也不执行. 主要特征:确保数据库的完整性 事务的ACID特性: A是事务的原子性:事务中包含的所有操作要么全做,要么全不做,也就是说所有的活动在数据中要么全反映要不全都不反映. C是事务的一致性:数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束. I是事务的隔离性:数据库允许多个并发的事物同时对其中的数据进行读写或修改的能

Spring中的事物管理,用 @Transactional 注解声明式地管理事务

事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性:一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性:可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来,

分布式数据库中全局唯一主键

[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现><activiti5.10解决分布式集群部署的主键问题><分布式环境下数据库主键方案><如何在高并发分布式系统中生成全局唯一Id><分布式环境下ID生成方法总结> <分布式环境下数据库主键方案> [ http://www.2cto.com/database/201309/243195.html ] 在只使用单数据库时,使用自增主键ID无疑是最适合的.但在集群.主从架构上时

判断数据在数据库中是否已存在.

今天下午和同事发生因为判断数据是否在数据库中已存在产生分歧.简易代码如下: //观点一,先取出数据库中已存在ID存入内存,再进行判断 //数据太多情况,内存爆炸 DateTable dt = ExcuteSQL('SELECT ID FROM TABLE'); //List为数据集,已经去重 foreach(var item in List){ //观点二,在for循环中根据ID查询是否已存在 //for循环执行数据库?没这么干过 DateTable dt = ExcuteSQL(string.

我们一起学习WCF 第十篇Wcf中实现事物

数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计,b负责前端,c负责后台,那么他们三个就是一个整体,哪一个人那里出了问题就要被打回. 第一步:我们开始定义个一个接口 [ServiceContract] public interface IUserInfo { [OperationContract] int AddInfo(); } 第二步当然是实

Spring中的事物管理,基于spring的bean的配置

很多东西与上边的相同,这儿只简介: 导包... 数据库中建立三个表... 建立存放连接数据库的file文件:jdbc.properties: ----------------------------------------------------------------- com.atguigu.spring.tx.xml包下建立, 接口:BookShopDao 类:BookShopDaoImpl 继承于接口,BookShopDao 异常处理类:BookStockException 测试类:JU

数据库中死锁那些事儿

转自:http://blog.csdn.net/eseaqyq/article/details/7795023 ———————————————————————————————————————————————————— 说起数据中的死锁,已经多次在笔试题目中遇到.今天特此做一个数据库死锁方面的总结,以绝后患,吼吼! 一.首先我们来看几个定义: 1.死锁 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态

MySQL数据库中的索引(一)——索引实现原理

今天我们来探讨一下数据库中一个很重要的概念:索引. MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,即索引是一种数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化.最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary searc

Mysql DBA 高级运维学习笔记-Mysql数据库中的日志文件

1.MySQL 引擎概述 1.1 什么是存储引擎 我们在录制一个视频文件的时候,可以转换成不同的格式如mp4,avi,wmv等,而且在电脑的磁盘上也会存在于不同类型的文件系统windows里常见的ntfs,fat32,存在于linux操作系统里常见的ext3,ext4,xfs.但是跟我们呈现的内容都是一样的,直观的区别是占用系统空间的大小与清晰程度不一样.那么数据库存储引擎也有很多种存储方式.无论用什么存储引擎来存储,用户看到的数据都是一样的.不同的引擎存储,引擎功能,占用的空间的大小,读取性能