主键约束只是唯一约束和非空约束的组合。所以,下面两个表定义是等价的:
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
相关推荐
注:一般序列名称由数据表名+主键字段+seq组成 (通常情况下主键字段即为自增字段),如下表名为cof_table_hot_analysis,主键字段为 id CREATE SEQUENCE cof_table_hot_analysis_id_seq START WITH 1 INCREMENT...
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...
除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会为自增字段生成一个新的数值。 我们今天的主题就是自增字段的实现,下表列出了主流...
DBCHM-最简单、最实用的数据库表列批注维护工具 DBCHM支持SqlServer/MySql/Oracle/...基于数据库中的表列结构(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述),导出数据库CHM文档。
增量备份时,脚本主要根据表的自增主键来查询新增数据,然后把新增的数据按照hive表的格式导出成文本,最后调用hive命令直接把文本导入hive内部。支持压缩表+多分区+字段增减。环境脚本内部会调用hive命令,所以必须...
修复MSSQL数据库环境下,自增主键表在save后,无法立即获取新增记录的id的bug. 优化JDiyRequest的InputStream(允许使用第三方上传组件). 修复数据库连接池中连接失效后,控制台会报错(但不影响使用)的bug;修复...
UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...
UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、 PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。...
UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...
UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...