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 进行插入、更新或者删除的操作。

标签:mysql,数据库优化,技巧
0
投稿

猜你喜欢

  • 使用sklearn的cross_val_score进行交叉验证实例

    2023-11-25 15:49:33
  • 用VB生成DLL封装ASP代码一个例子:连接access数据库等

    2008-04-07 13:06:00
  • node.js 中国天气预报 简单实现

    2024-05-13 10:05:44
  • 检测SQL Server是否有特洛伊木马

    2009-02-24 15:19:00
  • javascript实现删除前弹出确认框

    2024-04-18 09:28:54
  • MySQL数据库备份恢复的两个实用方法

    2008-12-31 15:09:00
  • 利用python将图片转换成excel文档格式

    2022-01-29 03:21:06
  • python实现控制电脑鼠标和键盘,登录QQ的方法示例

    2023-11-19 12:10:26
  • python使用PIL实现多张图片垂直合并

    2023-10-28 12:19:45
  • python简单读取大文件的方法

    2021-04-24 04:10:47
  • php中preg_match的isU代表什么意思

    2024-05-03 15:13:51
  • Python基于Opencv来快速实现人脸识别过程详解(完整版)

    2023-09-06 17:04:25
  • 详解Python的lambda函数用法

    2023-09-22 11:33:19
  • Android通过PHP服务器实现登录功能

    2023-07-02 07:08:58
  • 如何使用Cython对python代码进行加密

    2023-07-21 19:33:40
  • python 列表推导式使用详解

    2021-10-13 01:53:28
  • python 以16进制打印输出的方法

    2023-10-23 07:33:17
  • python实现简单颜色识别程序

    2022-07-15 09:34:47
  • Python按键或值对字典进行排序

    2021-01-02 10:45:52
  • 在SQL Server计算机上运行病毒扫描软件

    2009-01-19 14:38:00
  • asp之家 网络编程 m.aspxhome.com