• 数据库中的事物处理


    数据库

      数据库的更新通常都是由客观世界的所发生的事件引起的。为保证数据库内容的一致,就要将数据库的一组操作作为一个整体来进行,要么全部成功完成,要么全部失败退出。如果由于故障或其它原因而使一组操作中有一些完成,有一些未完成,则必然会使得数据库中的数据出现不一致,从而使得数据库的完整性受到破坏。因此,更新操作序列必须作为一个整体在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()取消事务处理。
  • 相关阅读:
    服务器控件Repeater
    HeidiSQL无法连接Myql
    未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序搜索
    DISTINCT删除重复数据
    Makedown文件保存问题
    Makedown 本地图片问题
    vsftpd配置文件详解[转载]
    centos 本地yum源的搭建
    OpenOffice菜单乱码解决和linux下安装字体
    让secureCRT正确显示中文
  • 原文地址:https://www.cnblogs.com/small-strong/p/3970687.html
Copyright © 2020-2023  润新知