PostgreSQL教程(一):数据表详解
一、表的定义:
对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。
1.创建表:
CREATETABLEproducts( product_nointeger, nametext, pricenumeric );
2.删除表:
DROPTABLEproducts;
3.创建带有缺省值的表:
CREATETABLEproducts( product_nointeger, nametext, pricenumericDEFAULT9.99--DEFAULT是关键字,其后的数值9.99是字段price的默认值。 ); CREATETABLEproducts( product_noSERIAL, --SERIAL类型的字段表示该字段为自增字段,完全等同于Oracle中的Sequence。 nametext, pricenumericDEFAULT9.99 );
输出为:
NOTICE: CREATETABLEwillcreateimplicitsequence"products_product_no_seq"forserialcolumn"products.product_no"
4.约束:
检查约束是表中最为常见的约束类型,它允许你声明在某个字段里的数值必须满足一个布尔表达式。不仅如此,我们也可以声明表级别的检查约束。
CREATETABLEproducts( product_nointeger, nametext, --price字段的值必须大于0,否则在插入或修改该字段值是,将引发违规错误。还需要说明的是,该检查约束 --是匿名约束,即在表定义时没有显示命名该约束,这样PostgreSQL将会根据当前的表名、字段名和约束类型, --为该约束自动命名,如:products_price_check。 pricenumericCHECK(price>0) ); CREATETABLEproducts( product_nointeger, nametext, --该字段的检查约束被显示命名为positive_price。这样做好处在于今后维护该约束时,可以根据该名进行直接操作。 pricenumericCONSTRAINTpositive_priceCHECK(price>0) );
下面的约束是非空约束,即约束的字段不能插入空值,或者是将已有数据更新为空值。
CREATETABLEproducts( product_nointegerNOTNULL, nametextNOTNULL, pricenumeric );
如果一个字段中存在多个约束,在定义时可以不用考虑约束的声明顺序。
CREATETABLEproducts( product_nointegerNOTNULL, nametextNOTNULL, pricenumericNOTNULLCHECK(price>0) );
唯一性约束,即指定的字段不能插入重复值,或者是将某一记录的值更新为当前表中的已有值。
CREATETABLEproducts( product_nointegerUNIQUE, nametext, pricenumeric );
CREATETABLEproducts( product_nointeger, nametext, pricenumeric, UNIQUE(product_no) );