- 浏览: 68488 次
- 性别:
- 来自: 广州
最新评论
-
tianhenkonng:
这么有用的东西,怎么都没有评论的? 抢沙发!
SQL中的表约束 -
wl6179:
年轻人好有前途呀~~~
PostgreSQL培训手册
文章列表
权限
如果你创建了一个数据库对象,那么你就成为它的所有者。缺省时,只有对象的所有者可以在对象上做任何事情。为了允许其它用户使用它,我们必须赋予他们权限。不过超级用户总是可以操作任何对象。
有好多种不同的权限:SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE 。适用于特定对象的权限因对象类型(表/函数等)不同而不同。有关 PostgreSQL 所支持的不同类型的权限的完整信息,请参考 GRANT 的手册页。下面的章节将为你展示如何利用这些权限。
修改或者 ...
表表达式
表表达式 计算一个表,它包含一个 FROM 子句,该子句可以根据需要选用 WHERE, GROUP BY, HAVING 子句。大部分表表达式只是指向磁盘上的一个所谓的基本表,但是我们可以用更复杂的表表达式以各种方法修改或组合基本表。
表表达式里的 WHERE, GROUP BY, HAVING 子句声明一系列对源自 FROM 子句的表的转换操作。所有这些转换最后生成一个虚拟表,传递给选择列表计算输出行。
7.2.1. FROM 子句
FROM 子句 从一个逗号分隔的表引用列表中生成一个虚拟表。
FROM table_reference [, table_reference [, ...
继承
PostgreSQL 实现了表继承,这个特性对数据库设计人员来说是一个很有效的工具。SQL99 及以后的标准定义了类型继承特性,和我们在这里描述的很多特性有区别。
让我们从一个例子开始:假设我们试图制作一个城市数据模型。每个州都有许多城市,但是只有一个首府。我们希望能够迅速检索任何州的首府。这个任务可以通过创建两个表来实现,一个是州府表,一个是非州府表。不过,如果我们不管什么城市都想查该怎么办?继承的特性可以帮助我们解决这个问题。我们定义 capitals 表,它继承自 cities 表:
CREATE TABLE cities (
name text,
...
事务
事务是所有数据库系统的一个基本概念。一次事务的要点就是把多个步骤捆绑成一个单一的、不成功则成仁的操作。其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题,导致该事务无法完成, ...
外键
考虑下面的问题:你想确保没有人可以在 weather 表里插入一条在 cities 表里没有匹配记录的数据行。这就叫维护表的参照完整性。在简单的数据库系统里,实现(如果也叫实现)这个特性的方法通常是先看看 cities 表里是否有匹配的记录,然后插入或者拒绝新的 weather 记录。这个方法有许多问题,而且非常不便,因此 PostgreSQL 可以为你做这些。
新的表声明看起来会像下面这样:
CREATE TABLE cities (
city varchar(80) primary key,
location point
);
CREATE ...
视图
假设你的应用对天气记录和城市位置的组合列表特别感兴趣,而你又不想每次键入这些查询。那么你可以在这个查询上创建一个视图,它给这个查询一个名字,你可以像普通表那样引用它。
CREATE VIEW myview AS
SELECT city, temp_lo, temp_hi, prcp, date, location
FROM weather, cities
WHERE city = name;
SELECT * FROM myview;自由地运用视图是好的 SQL 数据库设计的一个关键要素。视图允许我们把表结构的细节封装起来,这些表可能随你的应用进 ...
约束
数据类型是限制我们可以在表里存储什么数据的一种方法。不过,对于许多应用来说,这种限制实在是太粗糙了。比如,一个包含产品价格的字段应该只接受正数。但是没有哪种标准数据类型只接受正数。另外一个问题是你可能需要根据其它字段或者其它行的数据来约束字段数据。比如,在一个包含产品信息的表中,每个产品编号都应该只有一行。
对于这些问题,SQL 允许你在字段和表上定义约束。约束允许你对数据施加任意控制。如果用户企图在字段里存储违反约束的数据,那么就会抛出一个错误。这种情况同时也适用于数值来自缺省值的情况。
5.3.1. 检查约束
检查约束是最常见的约束类型。它允许你声明在某个字段里的数值必须使一个布尔 ...
聚集函数
和大多数其它关系数据库产品一样,PostgreSQL 支持聚集函数。一个聚集函数从多个输入行中计算出一个结果。比如,我们有在一个行集合上计算 count(数目), sum(总和), avg(均值), max(最大值), min(最小值)的函数。
比如,我们可以用下面的语句找出所有低温中的最高温度:
SELECT max(temp_lo) FROM weather; max
-----
46
(1 row)如果我们想知道该读数发生在哪个城市,可能会用:
SELECT city FROM weather WHERE temp_lo = max(temp_lo); -- 错 ...
在表之间连接
到目前为止,我们的查询一次只访问了一个表。查询可以一次访问多个表,或者用某种方式访问一个表,而同时处理该表的多个行。一个同时访问同一个或者不同表的多个行的查询叫连接查询。举例来说,比如你想列出所有天气记录以及这些记录相关的城市。要实现这个目标,我们需要拿 weather 表每行的 city 字段和 cities 表所有行的 name 字段进行比较,并选取那些这些数值相匹配的行。
【注意】这里只是一个概念上的模型。连接通常以比实际比较每个可能的配对行更高效的方式执行,但这些是用户看不到的。
这个任务可以用下面的查询来实现:
SELECT *
FROM weather, ...
要从一个表中检索数据就是查询这个表。SQL 的 SELECT 语句就是做这个用途的。该语句分为选择列表(列出要返回的字段)、表列表(列出从中检索数据的表)、以及可选的条件(声明任意限制)。比如,要检索表 weather 的所有行,键入:
...
1.安装指导
1.1简版命令集
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /us ...
III. 服务器管理
这部分覆盖的内容是那些 PostgreSQL 数据库管理员感兴趣的东西。包括安装软件、设置和配置服务器、管理用户和数据库、日常维护任务。任何运行 PostgreSQL 服务器的人,尤其是生产环境中的使用者,都应该熟悉这部分中讨论的内容。
本部分的信息大致上是按照一个新用户的阅读顺序进行安排的。但是每个章节都是自包含的,可以独立阅读。本部分信息是以主题单元按照陈述风格排列的。如果读者需要查看特定命令的完整描述,那么应该看看 Part VI 。
头几章书写的风格是让那些没有提前知识的朋友也能看懂,这样那些需要架设自己的服务器的读者就可以直接开始浏览这部分了。其它部分是有关调 ...