1。表的定义:

对于任何类型的关系数据库,表是数据存储中最核心、最基本的对象单元。

1。创建表:

复制代码代码如下所示:

创建表(产品)

product_no整数,

名称文本,

价格数字

);



2。删除表:

复制代码代码如下所示:

降表产品;





三.创建具有默认值的表:

复制代码代码如下所示:

创建表(产品)

product_no整数,

名称文本,

价格数字默认值为9.99,默认值是关键字,后面的值9.99是字段价格的默认值。

);



创建表(产品)

product_no串行,串行式的说明字段是一个自我提高的领域,这是完全一样的序列在Oracle。

名称文本,

价格数字默认9.99

);



输出是:

复制代码代码如下所示:

注意:创建表创建隐式序列products_product_no_seq 串行的产品。product_no



4。约束:

检查约束是表中最常见的约束类型,它允许您声明字段中的值必须满足布尔表达式,不仅如此,我们还可以声明表级检查约束。

复制代码代码如下所示:

创建表(产品)

product_no整数,

名称文本,

字段的值必须大于0,否则字段值的插入或修改将导致违规错误。

这是一个匿名的约束,不在表定义显示约束的名称,所以,PostgreSQL将基于当前的表名,字段名,和约束类型。

为约束自动命名,如products_price_check。

价格数字检查(价格> 0)

);



创建表(产品)

product_no整数,

名称文本,

-这一领域的检查约束被命名positive_price.the好处是,当约束被保持在未来,它可以根据名称直接操作。

价格数字约束positive_price检查(价格> 0)

);



下面的约束是非空约束,也就是说,不能将约束字段插入空值,或者将现有数据更新为空值。

复制代码代码如下所示:

创建表(产品)

product_no整数不空,

名称文本不为空,

价格数字

);



如果字段中有多个约束,则可以在不考虑约束声明的顺序的情况下定义它。

复制代码代码如下所示:

创建表(产品)

product_no整数不空,

名称文本不为空,

价格数字不是NULL检查(价格> 0)

);



唯一性约束是指定字段不能插入重复值或将记录的值更新为当前表中的现有值。

复制代码代码如下所示:

创建表(产品)

product_no整数独特,

名称文本,

价格数字

);

创建表(产品)

product_no整数,

名称文本,

价格数字,

独特的(product_no)

);



定义表中多个字段的联合唯一性。

复制代码代码如下所示:

创建表(例如)

一个整数,

B整数,

C整数,

唯一(a,c)

);



唯一性约束命名。

复制代码代码如下所示:

创建表(产品)

product_no整数约束must_be_different独特,

名称文本,

价格数字

);



当插入数据时,一个空值(null)被认为是不相等的数据,因此可以为一个唯一字段插入一个空值很多次,但是必须注意的是,所有数据库都不遵守这条规则,因此在进行数据库迁移时可能会造成许多麻烦。



5。主密钥和外部密钥:

从技术上讲,主键约束仅是惟一和非空约束的组合。

复制代码代码如下所示:

创建表(产品)

product_no整型主键字段product_no定义为表的主键的唯一。

名称文本,

价格数字

);



由于具有唯一的约束,主键可以同时用于多个字段,形成一个联合主键:

复制代码代码如下所示:

创建表(例如)

一个整数,

B整数,

C整数,

主键(b,c)

);



外键约束声明一个字段(或一组字段)的值必须与另一个表中某些行中出现的数字相匹配。

复制代码代码如下所示:

创建表(订单)

order_id整型主键的表也可以有自己的主键。

本表product_no领域是产品的表的主键外键(product_no)以上。

product_no整数参考产品(product_no),

数量

);



创建表t1(

整数主键,

B整数,

C整数,

-外键的字段数必须与引用表中的主密钥的数量一致。

外键(b,c)引用示例(b,c)

);



当引用多个外键表之间的约束关系,如果你想删除表(主表)应用于行的记录,因为主键字段的记录的值可参考表(表)中记录相关,所以删除操作将会失败。如果你想要完成此操作,一个显而易见的方法是删除引用表和记录的第一个相关的行,然后删除引用表中的行记录。但是,需要说明的是,PostgreSQL为我们提供了这样一个更方便的方法。

复制代码代码如下所示:

创建表(产品)

product_no整型主键,

名称文本,

价格数字

);



创建表(订单)

order_id整型主键,

shipping_address文本

);



创建表(order_items

product_no整数引用产品--删除限制,限制选项

order_id整数引用命令级联删除--级联删除选项

数量,

主键(product_no,order_id)

);



限制和级联删除是最常见的两种options.restrict禁止删除参考线。没有行动的意义是,如果有任何参考线检查约束时,它会抛出一个错误;如果你不说什么,这是默认行为。(两者之间真正的区别是,没有动作允许约束检查被推迟到以后的交易,并限制不是。)当级联宣言是从参考线删除线的引用也将被自动删除。上有两个选项:设置外键字段为默认设置,这将导致一个空的或默认值该字段引用时引用的行被删除。请请注意,这些选项不允许你逃脱被观察和约束的情况。例如,如果一个动作是默认设置,但默认值不满足外键,行动会失败。类似于删除和更新选项,即当引用的字段被修改(更新),可用的动作是一样的。

两。系统领域:

在PostgreSQL的每个数据表包含隐式定义的几种系统领域。因此,这些名字不能用于用户定义的字段的名称。这些系统方面的功能有点类似于Oracle的行号和ROWID。

对象标识符(OID:对象ID)的线。这场只使用OID在创建表时,或当配置参数default_with_oids成立。该字段的类型是OID(和相同的字段的名称)。

tableoid:包含该行的表的OID。这个领域,均选自继承层次的查询是非常有用的,因为没有它,它是很难解释的,独立的表格线是从。tableoid可以连接的pg_class油田得到表名。

Xmin:插入的行版交易身份(事务ID)。

Cmin:是指挥的身份(从零开始)内的交易。

Xmax:删除交易身份(事务ID),如果它是不是一个已删除的行版本,那么它是零。

Cmax:是删除命令标识符,或为零,在交易。

Ctid:一个行版本在该表位于物理位置。请注意,虽然Ctid可以用来定位线的版本,很快,一条Ctid将被更新或移动每次经过真空全。因此,Ctid不能作为长线的标识符。

OID是32位的数量,这是在同一个集群的普通计数器分配。对于一个大的或长期使用的数据库,这个计数器可能重叠。因此,假设OID是唯一这是非常错误的,除非你已经确保他们独特的措施。如果你需要确定表中的行,我们强烈建议使用一个序列号生成器。



三。表格的修改:

1。添加字段:

复制代码代码如下所示:

添加表格描述文本;



新添加的字段首先填充表中已经存在的行的默认值(如果不声明默认子句,则默认值为空值)。

添加新字段时,可以将约束同时赋给字段。

复制代码代码如下所示:

添加表格描述文本检查(说明< >);



2。删除字段:

复制代码代码如下所示:

下拉表列描述;



如果引用表并引用字段,则上述删除操作将失败。如果您希望删除删除引用字段时级联的所有引用字段,则可以使用以下语法。

复制代码代码如下所示:

下拉表列描述级联;



三.增加约束:

复制代码代码如下所示:

更改表产品添加检查(名称<);添加表级别约束

修改表的产品添加约束some_name独特(product_no);增加命名的唯一性约束。

修改表的产品添加外键(pdt_grp_id)参考pdt_grps;增加外键约束。

修改表的产品改变柱product_no集不为空;添加非空约束。



4。删除约束:

复制代码代码如下所示:

修改表的约束some_name产品;



为了显示命名约束,可以根据名称直接删除它。隐式自动命名约束,我们可以通过 D表名的psql得到约束的名称。如删除字段,如果你想删除一个依赖约束,你需要使用级联。一个例子是,外键约束取决于唯一约束或主键约束引用的字段。如:

复制代码代码如下所示:

考试= # D产品

表公共产品

柱型改性剂| |

------------ + --------- + -----------

product_no整数| |

名称的文本| |

价格数字| |

检查约束:

positive_price检查(价格> 0::数字)



与其他约束不同,非空约束没有名称,因此只能按以下方式删除:

复制代码代码如下所示:

修改表的产品改变柱product_no删除;



5。更改字段的默认值:

当默认值添加到现有字段时,它不会影响任何表中现有的数据行,但它只会更改将来插入命令的默认值。

复制代码代码如下所示:

更改表产品更改列价格设置默认值7.77;



下面是删除默认值:

复制代码代码如下所示:

更改表产品更改列价格下降默认值





6。修改字段的数据类型:

这是可能的成功只有当每一领域的现有项目可以转换为一个与转型的一个隐式类型的新类型。例如,当前的数据是整数,和转换的目标类型为数值或VARCHAR,这种转变通常是成功的。同时,PostgreSQL还将尝试一个字段的默认值(如果存在的话)将进入一个新的类型,以及任何涉及领域约束。但这些转变可能会失败,或可能产生奇怪的结果。在你修改一个字段类型,你最好删除这些约束,然后添加自己的手动修改。

复制代码代码如下所示:

表列价格型产品改变数值(10,2);



7。修改字段名:

复制代码代码如下所示:

修改表的产品命名列product_no到product_number;



8。修改表名:

复制代码代码如下所示:

将表产品重命名为项;



四、权限:

只有表的所有者可以修改或删除表的权限。为了授予权限,我们使用授予命令,撤消权限并使用撤消命令。

指出公共是一个特殊的用户是很重要的,它可以用来为系统中的每个用户分配权限。

复制代码代码如下所示:

格兰特table_name用户更新;给表的更新权限指定的用户。

格兰特选择table_name组群;给选择的权限表中指定的组。

撤销所有对table_name公共;所有权限的桌子都撤销公。



首先,只有对象的所有者(或超级用户)可以给予或撤销该对象的权限。不过,我们可以给一个权限权限赋予权限的权限授权给其他人。如果授予期权被撤销后,所有用户接收来自接收机的权限(直接或通过级联授权)将失去许可。

我想指出的是,大多数情况下,段落在这博客是从PostgreSQL中文文档,如博客系列,请注意同一源。