PostgreSQL 自带自增字段 请勿使用触发器或其他手段生成(Like Oracle, MySQL)

在Oracle中,因为不能设置字段的default sequence.nextval,所以如果要设置自增字段,需要使用触发器。
例如:

create sequence seq;
create table test(id int, info text);
CREATE OR REPLACE TRIGGER tg1 BEFORE INSERT ON test
FOR EACH ROW
BEGIN
  SELECT seq.nextval
  INTO :new.ID
  FROM dual;  
end;

这种方式能在INSERT前,把id的值改成seq.nextval。
从而达到自增主键的目的。
但是它的开销太大,而且非常不友好。


PostgreSQL中,建议这样使用

test=# create table test(id serial, info text);
CREATE TABLE
test=# insert into test (info) values (1);
test=# insert into test (info) values ('test');
test=# select * from test;
 id | info 
----+------
  1 | 1
  2 | test
(2 rows)

或者这样

test=# create sequence seq;
CREATE SEQUENCE
test=# create table test(id int default nextval('seq'), info text);
CREATE TABLE

或者这样

test=# create table test(id int, info text);
CREATE TABLE
test=# alter table test alter column id set default nextval('seq');
ALTER TABLE

请初次接触PG,PPAS或者以前有MySQL, Oracle使用经验的童鞋注意咯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值