如何在插入新行后立即将自动生成的主键值保存到第二列

Posted

技术标签:

【中文标题】如何在插入新行后立即将自动生成的主键值保存到第二列【英文标题】:How to save auto-generated primary key value into second column right after inserting new row 【发布时间】:2020-12-01 14:50:37 【问题描述】:

在表中插入新行时,我想在插入新行后立即将自动生成的主键值保存到同一行的第二列中。

假设:

我有一个表名teacher,其中包含三列id, pid, name

id 是主键,pid 可以重复。

现在每当我插入新行时,id 都会自动递增。

我想使用 postgresql 查询将 id 列的自动递增值复制到同一行的 pid 列中。

你能指导我如何使用 postgresql 查询来实现这一点吗?

【问题讨论】:

你为什么要这么做? 【参考方案1】:

我认为你需要一个before insert trigger 在桌子上teacher。为了实现它,您需要一个trigger function。

create or replace function pid_bi_tf() returns trigger language plpgsql as
$$
begin
  if NEW.pid is null then
    NEW.pid := NEW.id;
  end if;
  return NEW;
end;
$$;

create trigger pid_bi_t
 before insert on teacher
 for each row
 execute procedure pid_bi_tf();

我不明白您为什么需要这个,但您可能有充分的理由。您可以考虑此选项:除非字段 pid 有明确的值,否则请在其中保留 null 值。查询时使用此表达式:coalesce(pid, id)

【讨论】:

以上是关于如何在插入新行后立即将自动生成的主键值保存到第二列的主要内容,如果未能解决你的问题,请参考以下文章

获取mybaties插入记录自动增长的主键值

在 SQL Server CE 和 C# 中获取新插入行的主键?

SQL如何插入自增长的主键值(如图)。谢谢

mybatis中useGeneratedKeys用法--插入数据库后获取主键值

MyBatis应用记录:MyBatis如何得到插入数据之后的主键值

如何在 MySQL 中获取特定表的主键“列名”