PostgreSQL数据库实现表字段的自增
在使用MySQL的时候,创建表结构时可以通过关键字AUTO_INCREMENT
来指定主键是否自增。在PostgreSQL数据库中,使用序列来实现字段的自增。
PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。
PostgreSQL 提供三种序列伪类型,分别为SMALLSERIAL, SERIAL, BIGSERIAL,对应范围如下:
Name | Storage Size | Range |
---|---|---|
SMALLSERIAL | 2 bytes | 1 to 32,767 |
SERIAL | 4 bytes | 1 to 2,147,483,647 |
BIGSERIAL | 8 bytes | 1 to 922,337,2036,854,775,807 |
创建表时使用SERIAL伪类型定义序列:
CREATE TABLE table_name( id SERIAL);
赋值serial伪类型给id列,PostgreSQL将执行下列步骤:
- 创建序列对象并设置下一个生成值作为列的缺省值。
- 给对应列增加NOT NULL约束,因为序列总是生成一个整数值,不能为null值。
- 赋值序列的拥有者给id列,因此当id列或表被删除时,序列对象自动被删除。
对应背后执行语句:
CREATE SEQUENCE table_name_id_seq; CREATE TABLE table_name ( id integer NOT NULL DEFAULT nextval('table_name_id_seq')); ALTER SEQUENCE table_name_id_seqOWNED BY table_name.id;
创建表时设置主键自增
创建表
CREATE TABLE student( id SERIAL PRIMARY KEY, name VARCHAR);
插入数据
可以忽略对应列或使用default关键字都可以给serial赋值
INSERT INTO student(name) VALUES ('小明');INSERT INTO student(id, name) VALUES (DEFAULT, '小红');
修改已有表主键为自增
已有表结构
CREATE TABLE student( id int4 PRIMARY KEY, name VARCHAR);
创建序列
CREATE SEQUENCE student_id_seq START 1;
代码中的1表示此主键从1开始,
注意:如果项目中的表已经有数据,那么START 后边的数字一定要比数据库中的主键字段的最大值要大或者相同
修改主键默认值
ALTER TABLE student ALTER COLUMN id SET DEFAULT nextval('student_id_seq'::regclass);
也可使用Navicat设计表修改字段默认值
来源地址:https://blog.csdn.net/aaaaaaa1516682014292/article/details/128130697
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341