如何将 B 列的默认值设置为 A 列中的值?
我知道,在Microsoft SQL Server 中是可能的:
http://www.ideaexcursion.com/2010/04/19/default-column-value-to-identity-of-different-column/
在PostgreSQL 中可能吗?
链接示例显示如何使用同一表的标识列的值初始化一列。
这在 Postgres 中是可能的
create table identdefault
(
a serial not null,
b int not null default currval('identdefault_a_seq')
);
Run Code Online (Sandbox Code Playgroud)
serial将在后台创建一个已命名tablename_column_seq的序列,因此我们知道该序列identdefault.a将被命名identdefault_a_seq,我们可以通过该currval函数访问最后一个值。
跑步:
insert into identdefault default values;
insert into identdefault default values;
insert into identdefault default values;
select *
from identdefault
Run Code Online (Sandbox Code Playgroud)
将输出:
a | b
--+--
1 | 1
2 | 2
3 | 3
Run Code Online (Sandbox Code Playgroud)
这似乎仅适用于 Postgres 9.4,当我尝试使用 9.3(在 SQLFiddle 上)时出现错误。但在这种情况下,它也是可能的——你只是不能使用“快捷方式”,serial但需要明确地创建序列:
create sequence identdefault_a_seq;
create table identdefault
(
a int not null default nextval('identdefault_a_seq'),
b int not null default currval('identdefault_a_seq')
);
insert into identdefault default values;
insert into identdefault default values;
insert into identdefault default values;
Run Code Online (Sandbox Code Playgroud)
如果你想和serial列有相同的定义,你只需要让序列属于列:
alter sequence identdefault_a_seq owned by identdefault.a;
Run Code Online (Sandbox Code Playgroud)
SQLFiddle:http ://sqlfiddle.com/#!15/0aa34/1
更广泛的问题“我如何将 B 列的默认值设置为 A 列中的值? ”的答案很遗憾:不,你不能(见 klin 的评论)
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |