You are here

49 合并查询

admin 的头像
Submitted by admin on 星期三, 2015-06-10 05:39

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    合并查询是一种特殊的混合查询类型。虽然在SQL2003规范中为它们定义了语法,但实际上几乎没有任何数据库支持该标准语法。然而,大多数数据库通过使用特定于数据库的语法,都提供了一些替代实现。在Drupal中,合并查询构建器把合并查询的概念抽象成为了一个结构化的对象,根据数据库的不同,它们会被编译成特定于数据库的语法。

    在一般意义上,合并查询就是插入查询和更新查询的联合体。如果满足了给定条件,比如包含给定主键的记录已经存在,此时运行一个更新查询。如果给定条件未满足,则运行其它查询,比如插入查询。在大多数情况下,它等价于:

<?php
if (db_query("SELECT COUNT(*) FROM {example} WHERE id=:id", array(':id' => $id))->fetchField()) {
  // Run an update using WHERE id = $id
}
else {
  // Run an insert, inserting $id for id 
}
?>

    实际的具体实现,在不同的数据库之间,大不相同。注意,尽管合并查询在概念上是一个原子操作,但它们是否真的是原子操作,则取决于具体数据库的实现。例如,在MySQL中,它实现为了单个原子查询,不过上面的退化情况则不是原子操作。

    下面列出了合并查询的常见的习语。


Drupal版本: