gpt4 book ai didi

sql - 向 Oracle DB 的现有表添加唯一约束的好方法?

转载 作者:行者123 更新时间:2023-12-02 00:27:28 24 4
gpt4 key购买 nike

有一个包含三列的现有表,所有列都构成主键。

向其中添加唯一列的最佳方法是什么?当我在做的时候,最好为它创建一个序列。

最佳答案

您可以使用 ALTER TABLE 向表中添加额外的列。

ALTER TABLE table_name
ADD( new_column_name NUMBER UNIQUE );

您可以创建一个新序列,然后创建一个触发器,使用该序列填充新列
CREATE SEQUENCE sequence_name;

CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:new.new_column_name := sequence_name.nextval;
END;

如果您使用的是 11g 之前的 Oracle 版本,您的触发器将需要执行 SELECT来自 DUAL为了填充 :new.new_column_name列而不是直接赋值
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SELECT sequence_name.nextval
INTO :new.new_column_name
FROM dual;
END;

据推测,您还想在开始插入新行之前使用序列值初始化所有现有行
UPDATE table_name
SET new_column_name = sequence_name.nextval
WHERE new_column_name IS NULL

但是,除非目标是使用该新列作为主键,否则将新的序列生成列添加到具有复合主键的现有表中似乎很奇怪。拥有序列生成列的全部意义在于,您可以拥有一个不依赖于实际业务数据的稳定的合成主键。因此,删除现有主键、添加新列、填充数据、将新列声明为新主键,然后在包含旧主键的三列上定义唯一约束似乎更有意义 key 。

关于sql - 向 Oracle DB 的现有表添加唯一约束的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8344519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com