设为首页 加入收藏

TOP

MySQL心得10-1--事务(二)
2014-11-24 02:40:14 来源: 作者: 【 】 浏览:1
Tags:MySQL 心得 10-1-- 事务
NDEX / DROP INDEX
● ALTER TABLE / RENAME TABLE
● LOCK TABLES / UNLOCK TABLES
● SET AUTOCOMMIT=1
3). 撤消事务
Rollback语句是撤销语句,它撤销事务所做的修改,并结束当前这个事务。 语法格式:
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
在前面的举例中,若在最后加上以下这条语句: ROLLBACKWORK;
执行完这条语句后,前面的删除动作将被撤销,可以使用SELECT语句查看该行数据是否还原。
4). 回滚事务
www.2cto.com
除了撤销整个事务,用户还可以使用ROLLBACK TO语句使事务回滚到某个点,在这之前需要使用savepoint语句来设置一个保存点。
SAVEPOINT语法格式为: SAVEPOINTidentifier(保存点的名称)。
ROLLBACK TO SAVEPOINT语句会向已命名的保存点回滚一个事务。如果在保存点被设置后,当前事务对数据进行了更改,则这些更改会在回滚中被撤销。语法格式为:
ROLLBACK [WORK] TO SAVEPOINT identifier
当事务回滚到某个保存点后,在该保存点之后设置的保存点将被删除。RELEASESAVEPOINT语句会从当前事务的一组保存点中删除已命名的保存点。不出现提交或回滚。如果保存点不存在,会出现错误。语法格式为: RELEASE SAVEPOINT identifier
5. 举例说明:下面几个语句说明了有关事务的处理过程:
1. START TRANSACTION
2. UPDATE …
3. DELETE…
4. SAVEPOINT S1;
5. DELETE…
6. ROLLBACK WORK TO SAVEPOINT S1;
7. INSERT…
8. COMMIT WORK;
说明:在以上语句中,第1行语句开始了一个事务;第2、3行语句对数据进行了修改,但没有提交;第4行设置了一个保存点;第5行删除了数据,但没有提交;第6行将事务回滚到保存点S1,这时第5行所做修改被撤销了;第7行修改了数据;第8行结束了这个事务,这时第2、3、7行对数据库做的修改被持久化。
6.每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互的程度。前面曾提到,事务型RDBMS的一个最重要的属性就是它可以“隔离”在服务器上正在处理的不同的会话。在单用户的环境中,这个属性无关紧要:因为在任意时刻只有一个会话处于活动 状态。但是在多用户环境中,许多RDBMS会话在任一给定时刻都是活动的。在这种情况下,RDBMS能够隔离事务是很重要的,这样它们不互相影响,同时保证数据库性能不受到影响。
www.2cto.com
为了了解隔离的重要性,有必要花些时间来考虑如果不强加隔离会发生什么。如果没有事务的隔离性,不同的SELECT语句将会在同一个事务的环境中检索到不同的结果,因为在这期间,基本上数据已经被其他事务所修改。这将导致不一致性,同时很难相信结果集,从而不能利用查询结果作为计算的基础。因而隔离性强制对事务进行某种程度的隔离,保证应用程序在事务中看到一致的数据。
基于ANSI/ISO SQL规范,MySQL提供了下面4种隔离级:序列化(serialization)、可重复读(repeatable read)、提交读(read committed)、未提交读(read uncommitted)。
7. 只有支持事务的存储引擎才可以定义一个隔离级。定义隔离级可以使用SET TRANSACTION语句。语法格式:
SET [GLOBAL | SESSION] TRANSACTION Isolationlevel
SERIALIZABLE
| REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
说明:
如果指定GLOBAL,那么定义的隔离级将适用于所有的SQL用户;如果指定SESSION,则隔离级只适用于当前运行的会话和连接。MySQL默认为REPEATABLE READ隔离级。
(1)序列化
如果隔离级为序列化,用户之间通过一个接一个顺序地执行当前的事务提供了事务之间最大限度的隔离。
(2)可重复读
在这一级上,事务不会被看成是一个序列。不过,当前在执行事务的变化仍然不能看到,也就是说,如果用户在同一个事务中执行同条SELECT语句数次,结果总是相同的。
(3)提交读
READ COMMITTED隔离级的安全性比REPEATABLE READ隔离级的安全性要差。不仅处于这一级的事务可以看到其他事务添加的新记录,而且其他事务对现存记录做出的修改一旦被提交,也可以看到。也就是说,这意味着在事务处理期间,如果其他事务修改了相应的表,那么同一个事务的多个SELECT语句可能返回不同的结果。
(4)未提交读
www.2cto.com
提供了事务之间最小限度的隔离。除了容易产生虚幻的读操作和不能重复的读操作外,处于这个隔离级的事务可以读到其他事务还没有提交的数据,如果这个事务使用其他事务不提交的变化作为计算的基础,然后那些未提交的变化被它们的父事务撤销,这就导致了大量的数据变化。
默认情况下,这个系统变量的值是基于每个会话设置的,但是可以通过向SET命令行添加GLOBAL关键字修改该全局系统变量的值。
当用户从无保护的READUNCOMMITTED隔离级转移到更安全的SERIALIZABLE级时,RDBMS的性能也要受到影响。原因很简单:用户要求系统提供越强的数据完整性,它就越需要做更多的工作,运行的速度也就越慢。因此,需要在RDBMS的隔离性需求和性能之间协调。
MySQL默认为REPEATABLE READ隔离级,这个隔离级适用于大多数应用程序,只有在应用程序有具体的对于更高或更低隔离级的要求时才需要改动。没有一个标准公式来决定哪个隔离级适用于应用程序——大多数情况下,这是一个主观的决定,它是基于应用程序的容错能力和应用 程序开发者对于潜在数据错误的影响的判断。隔离级的选择对于每个应用程序也是没有标准的。例如,同一个应用程序的不同事务基于执行的任务需要不同的隔离级。

作者 tianyazaiheruan
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle秒变时间 下一篇Oracledbconsole服务不能启动的解..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: