MySQL最好的优化技巧(2)
来源:我想网 发布时间:2009-10-27 12:05:00
4、事务
尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查 询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这 个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况: 第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情 况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN 关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
BEGIN;
INSERT INTO salesinfo SET CustomerID=14;
UPDATE inventory SET Quantity=11
WHERE item=’book’;
COMMIT;
事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。
5、锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户
来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。
其实,有些情况下我们可以通过锁定表的方法来获得更好的性能。下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。
LOCK TABLE inventory WRITE
SELECT Quantity FROM inventory
WHEREItem=’book’;
…
UPDATE inventory SET Quantity=11
WHEREItem=’book’;
UNLOCK TABLES
这 里,我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操作。


猜你喜欢
- 变量(variable)是Python语言中一个非常重要的概念。变量的主要作用就是为Python程序中的某个值起一个名字。类似于“张三”、“
- 1.正则表达式是什么很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法,这时候就需要对用户输入的检索,或
- 我就废话不多说啦,还是直接看代码吧!list1 = [1,2,3,4]a,b,c,d = list1则a = 1b =2等这种方式只有当左边
- 教大家做一个简易的猜数字的游戏,但确实蛮简单的,我这个四年级的小盆友也才学了一天,所以给那些不会的教一下。我们先来看导入模块:"&
- python实现监听键盘,供大家参考,具体内容如下实现服务端import picklefrom io import BytesIOimpor
- 1. 写在前面今天整理OpenCV入门的第三个实战小项目,前面的两篇文章整理了信用卡数字识别以及文档OCR扫描, 大部分用到的是OpenCV
- 1. 折线图折线图(Line Chart)是一种将数据点按照顺序连接起来的图形,也可以看作是将散点图按照X轴坐标顺序链接起来的图形。折线图的
- 随着网页制作热潮的兴起,Dreamweaver 4.0强大的功能深受众多网页制作者的喜爱。特别是Dreamweaver 4.0中有许多第三方
- 最近写项目需要画出应用程序调用链的网路拓扑图,完全自己写需要花费些时间,那么首先想到的是echarts,但echarts的自定义写法写起来非
- 例如:性别 gender 男 女 保密基本语法:enum(数据值 1,数据值 2...);数据值列表在 255 个以内,使用 1 个字节来存
- 本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-impo
- 主要记录两种不同的beam search版本版本一使用类似层次遍历的方式进行搜索,用队列进行维护,每次循环对当前层的所有节点进行搜索,这些节
- 前言为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数
- 前言因为Python的水平目前一直是处于能用阶段,平时写的脚本使用的Python的写法也比较的简单,没有写过稍微大一点的项目。对Python
- Sequence Typessequence类型有六种:strings, byte sequences (bytes objects), b
- 本文介绍了layer弹出子iframe层父子页面传值的实现方法,分享给大家,具体如下:父页面获取子页面元素格式:$("#ifram
- 关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格。但是,你
- 本文实例讲述了Python subprocess模块常见用法。分享给大家供大家参考,具体如下:subprocess模块是python从2.4
- 最近在做个大数据量的录入,为了方便客户输入,需要通过方向键来移动到输入框中,本代码仅供学习、研究,请勿用于其它用途:D下面贴的代码只是贴出来
- 在一些问答平台,经常会遇到一类关于Python的问题:“学习Python,应该选择哪款开发工具?”如果,对于有一定经验的开发者而言,肯定会对