网站大量收购闲置独家精品文档,联系QQ:2885784924

第六章 MySQL事务和优化.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 MySQL事务和优化

;课程介绍;学习对象;学习目标; 目录大纲;事务在数据库的使用过程中,是一个非常重要的概念。事务(TRANSACTION)也称工作单元,是一个或多个SQL语句组成的序列,这些SQL操作作为一个完整的工作单元,要么全部执行,要么全部不执行。通过事务的使用,能够使一系列相关操作关联起来,防止出现数据不一致现象 。 ;例如:你需要进行一个转帐的活动,即把A账户内资金转帐到B账户上,转帐金额为1000元,那么这个活动包含两个动作: 1.A账户减少1000元 2.B账户增加1000元 如果没有事务,我们也许就会遇到一个不太愉快的现象,由于系统的非正常因素。第二个操作失败了,而第一个操作成功了,那么你A账户上的资金已经减少了1000元了。而B账户上却没有相应的增加1000元。对银行来讲这或许是个好消息。可对用户而言这绝对是不公平的。为了避免这样的情况发生,我们可以将以上这两个物理上分离但逻辑上是一个整体的操作定义到一个事务中。那么两个操作将同时成功或是同时失败,从而保证数据的一致性。 ;原子性 事务是由一个或是多个组合在一起的动作组成,就像一个独立的工作单元。原子性保证要么所有的操作都要成功,要不全部都失败。如果所有的动作都成功了,我们就是说这个事务成功了,不然就是失败的,要回滚 。 一致性 一旦一个事务完成了(不管是成功的还是失败的),整个系统处于操作规则的统一状态,也就是说数据不会损坏 。 ;隔离性 事务的隔离性是指数据库中一个事务的执行不能被其他事务干扰。事务应该允许多个用户去同时操作一个数据,但是一个用户的操作不应该影响另一个用户的操作。所以,事务应该隔离起来,目的为了防止同时的写和读操作 。 持久性 事务的持久性也称为事务的永久性,它是指一个事务一旦被提交,则起对数据库中数据的改变就是永久的。通常,我们把事务的结果存放在数据库中,或是别的持久性设备上 。 ;要使用 MySQL 中的事务处理,首先需要创建使用事务表类型(如 BDB = Berkeley DB 或 InnoDB)的表。 MySql 的数据表分为两类,一类是传统的数据表,另一类则是支持事务的数据表。支持事务的数据???分为两种:InnoDB 和 BerkeleyDB。我们可以通过以下的命令确认安装的 MySql Server 是否支持这两 种数据表: SHOW VARIABLES LIKE have_innodb; SHOW VARIABLES LIKE have_bdb; ;通常我们可以通过使用如下的方式来创建支持事务的数据表: CREATE TABLE TABLE_NAME(FIELD1, FIELD2.... FIELDn) TYPE=INNODB; 如果原来建好的数据表,我们也可以通过 ALTER TABLE 命令直接去改变数据表的类型,而不需要备份数据,然后 Drop 表,再建立新表,再导入数据这样烦琐的步骤。如: ALTER TABLE TABLE_NAME TYPE=INNODB; ;原始数据如下: ;要在事务表上使用事务处理,必须要首先关闭自动提交: SET AUTOCOMMIT = 0; 事务处理以 BEGIN 命令开始: BEGIN; 现在 mysql 客户处在于服务器相关的事物上下文中。任何对事务表所做的改变在提交之前不会成为永久性的改变。 ;执行删除命令。 ;若在提交前终止整个事务,可以进行回滚操作: 执行回滚命令。 ;在做出所有的改变之后,使用 COMMIT 命令完成事务处理: 执行提交命令 ;除了 COMMIT 命令外,下列命令也会自动结束当前事务: ALTER TABLE BEGIN CREATE INDEX DROP DATABASE DROP TABLE LOCK TABLES RENAME TABLE TRUNCATE UNLOCK TABLES ; 许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。 虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。 下面介绍一些常用优化方法。;选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档