Postgresql主键自增


在postgres中,

主键约束只是唯一约束和非空约束的组合。所以,下面两个表定义是等价的:

CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

 

主键也可以约束多于一个字段;其语法类似于唯一约束:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

 

主键表示一个或多个字段的组合可以用于唯一标识表中的数据行。这是定义一个主键的直接结果。请注意:一个唯一约束( unique constraint )实际上并不能提供一个唯一标识,因为它不排除 NULL 。

一个表最多可以有一个主键(但是它可以有多个唯一和非空约束)。关系型数据库理论告诉我们,每个表都必须有一个主键。PostgreSQL 并不强制这个规则,但我们最好还是遵循它。

 

值得注意的是,SQLite中,主键是自动 增长的

在MySQLI中,需要加一个auto_increment 标志

在Postgres中,有一个专门的类型 叫做serial的,来表示自动增加

 

 

为每一行生成一个”序列号(serial number)“。在 PostgreSQL 里,通常是用类似下面这样的方法生成的:

CREATE TABLE products (
    product_no integer DEFAULT nextval('products_product_no_seq'),
    ...
);

这里的 nextval() 从一个序列对象(sequence object)提供后继的数值。这种做法非常普遍,以至于我们有一个专门的缩写用于此目的:

CREATE TABLE products (
    product_no SERIAL,
    ...
);

其实, 自动增加 字段是 default字段 的一种特殊情况

可以在创建表之后,再次创建sequence

CREATE SEQUENCE event_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

alter table event alter column id set default nextval('event_id_seq');

或者修改字段类型
ALTER TABLE event ALTER COLUMN id TYPE serial;

添加主键
ALTER TABLE charge ADD PRIMARY KEY (id);

http://www.postgresql.org/docs/8.2/static/sql-altertable.html

猜你喜欢

转载自canhai.iteye.com/blog/1874607