PostgreSQL表的基本概念

关系型数据库中的表非常类似纸面上的一张表:它由行和列组成。字段的数目和顺序是固定的,每个字段都有一个名字。行的数目是变化的(它反映了给定时刻存储的数据量)。 SQL 对表中行的顺序没有任何承诺。当读取一个表时,行将会以一个未指定的顺序出现,除非你明确地要求排序。这些内容在http://www.infocool.net/PostgreSQL/index.htm里介绍。另外,SQL 并不给行赋予唯一的标识,因此我们很可能在一个表中有好几个完全相同的行。这是作为 SQL 基础的下层数学模型的必然结果,但是这通常是我们不愿意看到的。本章稍后的部分将讨论如何处理这个问题。

每个字段都有一个数据类型。数据类型控制着一个字段所有可能值的集合,并且控制着字段中数据的语义,这样它就可以用于计算。比如,一个声明为数值类型的字段不会接受任意文本字符串,而存储在这种字段里的数据可以用于数学计算。相比之下,一个声明为字符串类型的字段接受几乎任意类型的数据,但是它们不能进行数学计算(不过可以进行像字符串连接之类的操作)。

PostgreSQL包含一套可剪裁的内置数据类型,这些类型可以适用于许多应用。用户也可以定义它们自己的数据类型。常用的数据类型有:用于整数的integer、用于可能为分数的numeric、用于字符串的text、用于日期的date、用于时间的time、用于时间戳的timestamp

要创建一个表,可用使用CREATE TABLE命令。在这个命令里,你至少要为新表声明一个名字,还有各字段的名字以及其数据类型。比如:

CREATE TABLE my_first_table (
    first_column text,
    second_column integer
);

这样就创建了一个有两个字段的名为my_first_table的表。第一个字段的名字是first_column,数据类型为text;第二个字段的名字是second_column,数据类型是integer。类型名通常也是标识符(但是有一些例外)。请注意字段列表是逗号分隔的,并且用圆括弧包围。

当然,前面只是一个非常虚构的例子。通常,你会给表和字段取一个有意义的名字,用以表达他们存储的什么类型的数据,所以还是让我们给一个比较现实的例子:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

numeric类型可以存储分数部分,金额很可能有这样的分数部分。

提示: 如果你创建了许多相互关联的表,那么最好为表和字段选择一致的命名模式。比如,表名字可以统一选择单数或者复数,两种选择都有这样那样的理论家支持。

一个表能包含的字段数目是有限制的。根据字段类型的不同,这个数目可能在 250 到 1600 之间。不过,不管是哪一端的数字,如果你设计的表包含那么多的字段好像都很不可能发生,否则是设计上有问题的表现。

如果你不再需要一个表,那么可以用DROP TABLE命令删除它。像这样:

DROP TABLE my_first_table;
DROP TABLE products;

试图删除一个不存在的表是一个错误。不过,在 SQL脚本文件里,我们通常在创建表之前无条件删除它并忽略错误消息,所以无论要删除的表存不存在,这个脚本都成功。当然你还可以使用DROP TABLE IF EXISTS来避免错误消息,不过这并不符合 SQL 标准。

使用到目前为止讨论的工具我们可以创建功能完整的表。本章剩下的部分是有关向表定义中增加特性、保证数据完整性、安全性或便利性的内容。

时间: 2024-10-11 15:07:23

PostgreSQL表的基本概念的相关文章

PostgreSQL表空间、模式、表、用户/角色之间的关系

PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关系 在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:CREATE ROLE kanon PASSWORD 'kanon';接着

常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; help show; 显示可用的数据库列表:show databases; 显示一个数据库内可用的表的列表:show tables; 显示表列:show columns from 一个表名; /describe 表名;  示例:show columns from customers;    desc

POSTGRESQL表分区

最近发现POSTGRESQL的一张表(下面统称为test表)达到67G大小,不得不进行重新分区,下面记录一下步骤: 前言.查看数据表结构(表结构肯定是虚构的) CREATE TABLE test ( id integer NOT NULL DEFAULT , logday character varying, -- 登录日期 CONSTRAINT test PRIMARY KEY (id) ); 一.正式开始-在dw模式下面创建这个父亲表 CREATE TABLE dw.test ( id in

DBA_Oracle DBA常用表汇总(概念)

2014-06-20 BaoXinjian 一.与权限相关的字典 ALL_COL_PRIVS表示列上的授权,用户和PUBLIC是被授予者 ALL_COL_PRIVS_MADE表示列上的授权,用户是属主和被授予者 ALL_COL_RECD表示列上的授权,用户和PUBLIC是被授予者 ALL_TAB_PRIVS表示对象上的授权,用户是PUBLIC或被授予者或用户是属主 ALL_TAB_PRIVS_MADE表示对象上的权限,用户是属主或授予者 ALL_TAB_PRIVS_RECD表示对象上的权限,用户

DBA_Tablespace表空间的概念和管控(概念)

2014-07-24 BaoXinjian 一.摘要 我们知道oarcle数据库真正存放数据的是数据文件(data files): Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间: 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构: 从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成: 1. 表空间属性 一个数据库可以包含多个表

CSS样式表------第一章:样式表的基本概念

CSS(Cascading Style Sheets,层叠样式表),控制页面样式外观,作用是美化HTML网页. 一. 样式表的基本概念 1.样式表的分类 (1)内联样式表  -----放在元素的开始标记中,只对当前元素起作用,和html联合显示,控制精确,但是可重用性差,冗余多. 例: <input name="txt" style="border:0px; border-bottom:1px solid black;" type="text&quo

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我的试验,并循序讲清其中关系. 首先,实验出角色与用户的关系    在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:   CRE

PostgreSQL表依赖性跟踪

如果你创建了一个包含许多表,并且带有外键约束.视图.触发器.函数等复杂的数据库结构.那么你就会在对象之间隐含地创建了一个依赖性的网络.比如,一个带有外键约束的表依赖于它所引用的表. 为了保证整个数据库结构的完整性,PostgreSQL保证你无法删除那些还被其它对象依赖的对象.比如,试图删除在里被订单表所依赖的产品表是不能成功的,会有类似下面的错误消息出现: DROP TABLE products; NOTICE: constraint orders_product_no_fkey on tabl

2.4. 向PostgreSQL表中添加行

INSERT 语句用于向表中添加行: INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27'); 请注意所有数据类型都使用了相当明了的输入格式.那些不是简单数字值的常量必需用单引号(')包围,就像在例子里一样.date 类型实际上对可接收的格式相当灵活,不过在本教程里,我们应该坚持使用这里显示的格式. point 类型要求一个座标对作为输入,如下: INSERT INTO cities VALUES ('Sa