MySQL数据库应用与管理 第3版 第12章 MySQL事务.pptx
第12章MySQL事务12.1事务的概念
事务的概念首先看一个现实中银行转账的业务流程的例子:A帐号需要往B账户中转账1000元,这包含两个过程: A帐号中减去1000元; B账户中增加1000元。这两个过程的顺序也可以对调。如果想要正确实现转账功能,则必须保证这两个过程都要能够完成。如果只完成了其中的一个过程,那么这个转账操作肯定是错误的。
事务的概念为了解决这种类似的问题,数据库管理系统提出了事务的概念:将一组相关操作绑定在一个事务中,为了使事务成功,则必须成功执行该事务中的所有操作。换句话说,该事务中的所有操作要么都执行、要么都不执行。MySQL事务主要用于处理操作量大,复杂度高的数据,事务处理可以用来维护数据库的完整性。在MySQL中只有使用InnoDB存储引擎的数据库或表才支持事务。
MySQL事务12.2事务的特性
事务的特性一般来说,事务的处理必须满足四原则,即原子性(A)、一致性(C)、隔离性(I)和持久性(D),简称ACID原则。原子性(Atomicity):事务必须是原子工作单元,事务中的操作要么全部执行,要么全不执行,不可以只完成部分操作。一致性(Consistency):事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。例如,银行转账前后的两个帐户金额之和应该保持不变。隔离性(Isolation):系统必须保证事务不受其他并发执行事务的影响,即当多个事务同时运行时,各个事务之间相互隔离,不可互相干扰。持久性(Durability):一个已完成的事务对数据所做的任何变动,在系统中是永久有效的。
事务的特性事务的四原则保证了一个事务或者成功提交,或者失败回滚,二者必居其一。当事务提交成功后,它对数据的修改则是永久有效的;当事务提交失败时,它对数据的修改则都会恢复到该事务执行前的状态。
MySQL事务12.3事务的执行模式
本节内容1.隐式事务2.显式事务
事务的执行模式在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作。隐式事务是一种自动开始、自动结束(确认或回滚)的事务,一条SQL语句就是一个隐式事务。1.隐式事务
事务的执行模式例如,创建课程表course的SQL语句如下: CREATETABLEcourse( idINTUNSIGNEDNOTNULLAUTO_INCREMENT, cNoCHAR(5)NOTNULL, cNameVARCHAR(30)NOTNULL, creditTINYINTUNSIGNED, remarkVARCHAR(100), PRIMARYKEY(id) );1.隐式事务说明:这条语句本身就构成了一个事务,不过是一个隐式事务。要么正确创建包含5列的数据表course,要么不创建任何数据表。不可能出现创建了只包含1列、2列或者3列的数据表course的情况。
事务的执行模式可以使用SET语句来改变MySQL的自动提交模式,其语法格式如下:禁止自动提交:SETAUTOCOMMIT=0开启自动提交(默认值):SETAUTOCOMMIT=11.隐式事务
事务的执行模式显式事务是一种显式地定义事务开始、结束(确认或回滚)的事务。因此,一个显式事务的语句以BEGIN或者STARTTRANSACTION开始,至COMMIT或者ROLLBACK结束。BEGIN或者STARTTRANSACTION:开始一个事务COMMIT:事务确认ROLLBACK:事务回滚2.显式事务
事务的执行模式使用COMMIT语句提交事务,意味着系统将事务开始以来所做的所有数据修改,将成为数据库的永久部分。因此COMMIT语句也标志着一个事务的结束。只有在所有数据修改都完成后、准备提交给数据库时,才执行这一动作。一旦执行了该命令,将不能再回滚事务。使用ROLLBACK语句回滚事务,意味着系统将取消自事务开始以来所做的所有数据修改,并且释放由事务控制的资源。因此ROLLBACK语句也标志着事务的结束。2.显式事务
事务的执行模式使用保留点SAVEPOINT语句,可以使事务回滚到设置的保留点SAVEPOINT、而不影响SAVEPOIN创建前的所做的数据修改,不需要放弃整个事务。其语法格式如下:设置一个保留点:SAVEPOINTsavepoint_name;回滚到设置的保留点:ROLLBACKTOsavepoint_