数据库MySQL架构:事务处理计算机等级考试

文章作者 100test 发表时间 2009:06:15 06:40:23
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机三级考试时间是2009年9月19日至23日。2009年下半年全国计算机三级考试报名时间会在考前两个月开始报名!更多优质资料尽在百考试题论坛 百考试题在线题库

  事务处理
  在事务处理之前,你不能知道数据库系统有如此多的高级功能。一个事物就是一组SQL查询。这一组被看做是原子的。也就是一个单独的工作单元。如果数据库引擎可以应用整个组的查询,就执行完毕。但是如果其中一条语句出现问题,整个组的语句都不会被执行。也就是要么全部执行,要么全部不执行。
  这部分所讲到的事物很少是针对MySQL的,如果你已经熟悉了ACID事务处理,可以跳过这一部分。
  银行的应用是解释为什么需要事务处理的经典案例。假设银行数据有两张表。checking以及savings.从Jane的checking账户转账200到她的saving账户。至少要三步
  确定她的checking账户至少有200
  从checking账户扣除200
  把200添加到她的savings账户中。
  整个操作封装为了一个事物。因此其中一个操作失败,整个操作都会回滚。
  开始一个事物的语句是START TRANSACTION以及修改成功用COMMIT或者放弃改变用ROLLBACK。因此这个例子的SQL语句如下
  Sql代码
  START TRANSACTION.
  SELECT balance FROM checking WHERE customer_id = 10233276.
  UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276.
  UPDATE savings SET balance = balance 200.00 WHERE customer_id = 10233276.
  COMMIT.
  但是单独的事物并不能代表全部。如果在数据库服务器在执行到第四行的时候挂掉呢?用户可能就白白损失了200。以及如果有个处理出现在了3,4行之间,而不会去扣除checking帐户的余额。那么银行就白白给了用户200.
  在系统没有通过ACID的测试之前,仅仅有事物还是不够的。ACID的意思是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这些都是一个好的事务处理系统所要遵循的标准。
  原子性(Atomicity):
  一个事物必须做为一个单独不可分割的工作单元来运行。因此整个事物要么全部成功要么全部失败。当事物具有原子性的时候,不能一部分的执行。要么全部执行,要么全部失败。
  一致性(Consistency):
  数据库应该总是从一个一致的状态到另一个。在我们的例子中,一致性要确保程序在3,4行崩溃并不会使checking帐户减少200。因为事物没有提交。数据库没有任何变化。
  隔离性(Isolation):
  当这个事物没有完成的时候,它的结果对于其他的事物是不可见的。这点确保了在运行完第3行,以及在第4行之前。200还是在checking帐户中。当我们讨论隔离性的时候,我们常常用到不可见(invisible)这个词。
  持久性(Durability):
  当事物提交,这个事物的改变就被持久化了。意思就是更改被记录了。数据不会丢失了。持久性是个挺模糊的概念。因为它有很多级别。一些持久性策略比其他的有更强的安全性保证。但是绝对没有100%的持久。我们会在以后的章节讨论在MySQL中持久性的意思。
  ACID事物保证了银行不会损失钱。这点在业务逻辑上很难或者根本做不到。一个有ACID的数据库服务器已经把各种各样复杂的事情都解决了,使你没有必要自己去确保ACID。
  随着锁的颗粒度上升,数据库服务器要在安全性上做更多的工作了。数据库的ACID事物也需要更多的CPU,内存,硬盘空间。我们多次说过MySQL存储引擎架构的优势。你可以决定到底是否使用事物。如果不需要可以选择更好的没有事务支持的存储引擎。在没有事物的时候,你可以使用LOCK TABLES来保护数据。决定权在于你。
  隔离级别
  隔离要比看上去复杂的多。SQL定义了4种隔离级别。这些规则让更改对事物的内部和外部可见和不可见。低级别的隔离可以高并发低消耗。
  (每个存储引擎的隔离级别实现都是不同的,如果你过去经常使用其他数据库产品,存储引擎不一定符合你的需求,你应该看手册决定使用哪个存储引擎。)
  未提交读(READ UNCOMMITTED)
  在这个级别中,事物可以看到未提交事物的结果。这个级别有很多问题会发生,除非你真的真的明白你在做什么以及有足够的理由去做。这级别在实践中很少使用。因为性能相对于其他级别也没什么优势。读取未提交的数据,也叫脏读(dirty read)
  已提交读(READ COMMITTED)
  有许多数据库系统默认的隔离级别都是已提交读(MySQL并不是)。它满足了早期使用的隔离简单定义:一个事物可以看到事物提交后的改变。这种改变在提交之前对于其他事物是不可见的。这级别也经常叫做不可重复读(nonrepeatable read)。意思就是你运行同一语句两次,可以看到不同的数据。

相关文章


数据库MySQL架构:事务处理计算机等级考试
十招让内容页流量翻番计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛