如何在插入新行后立即将自动生成的主键值保存到第二列
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)
。
【讨论】:
以上是关于如何在插入新行后立即将自动生成的主键值保存到第二列的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server CE 和 C# 中获取新插入行的主键?
mybatis中useGeneratedKeys用法--插入数据库后获取主键值