插入到一个带有serial字段的表中,并使用它的未来值



我有以下表格:

CREATE TABLE problem (
  id SERIAL,
  title VARCHAR(50),
  author VARCHAR(50),
  path TEXT,
  compiler VARCHAR(20),
  PRIMARY KEY (id)
);

problem.id是一个自增的整数。有几种方法可以在不知道其值的情况下执行插入操作:

INSERT INTO problem VALUES (DEFAULT, 'Hello World', 'unknown', '/var/www/files/problems', 'Python');
INSERT INTO problem (title, author, path, compiler) VALUES ('Hello World', 'unknown', '/var/www/files/problems', 'Python');

但是,我想知道插入时的problem.id,因此我可以将其附加到path:

/var/www/文件/问题/ {id}

其中{id}为插入问题的problem.id

您可以使用nextvallastval的组合:

INSERT INTO problem VALUES (
   nextval('problem_id_seq'), 
   'Hello World',
   'unknown', 
   '/var/www/files/problems/' || lastval(), 
   'Python'
);

Call to nextval正是Postgres使用的SERIAL字段的默认值。因此,可以在不显式调用nextval的情况下编写语句:

INSERT INTO problem VALUES (
   DEFAULT, 
   'Hello World',
   'unknown', 
   '/var/www/files/problems/' || lastval(), 
   'Python'
);

相关内容

  • 没有找到相关文章

最新更新