如何在表中添加唯一标识符列?
Posted
技术标签:
【中文标题】如何在表中添加唯一标识符列?【英文标题】:How to add unique identifier column in table? 【发布时间】:2019-03-06 16:15:39 【问题描述】:我有一个没有任何唯一标识符的表。我想向表中添加唯一列,我该如何实现?
我的桌子是这样的:
name age gender marital_status
SAM M Single
BOB M Married
JEN F Single
BOB M Married
我希望我的桌子是这样的:
id name age gender marital_status
1 SAM M Single
2 BOB M Married
3 JEN F Single
4 BOB M Married
我想要唯一标识符的原因是因为一些记录是彼此重复的,我想删除重复的。
【问题讨论】:
添加 uid 不会删除重复项;您仍然需要这样做,并且具有防止添加重复项的逻辑。您可能已经知道所有这些,但还不清楚。 【参考方案1】:您可以执行以下操作:
alter table t add id int;
create sequence t_seq;
update t set id = t_seq.nextval;
alter table t modify id primary key;
不幸的是,我认为 Oracle 不允许您将列放在列列表的开头。它总是添加到末尾。
【讨论】:
谢谢戈登。它有帮助,是的,它总是放在最后,但逻辑工作得很好。【参考方案2】:演示表:
create table people (name, gender, marital_status)
as
select 'SAM', 'M', 'Single' from dual union all
select 'BOB', 'M', 'Married' from dual union all
select 'JEN', 'F', 'Single' from dual union all
select 'BOB', 'M', 'Married' from dual;
添加标识列(需要 Oracle 12.1 或更高版本):
alter table people add id integer generated always as identity;
如果您愿意,请重新排列字典顺序,以便在您描述表时首先出现新列(也需要 Oracle 12.1):
begin
for r in (
select column_name from user_tab_columns c
where c.table_name = 'PEOPLE'
and c.column_name <> 'ID'
order by c.column_id
)
loop
execute immediate 'alter table people modify ' || r.column_name || ' invisible';
execute immediate 'alter table people modify ' || r.column_name || ' visible';
end loop;
end;
/
【讨论】:
太棒了。你真棒以上是关于如何在表中添加唯一标识符列?的主要内容,如果未能解决你的问题,请参考以下文章