gpt4 book ai didi

sql - 使 NOT NULL 约束仅适用于新行

转载 作者:行者123 更新时间:2023-12-03 15:22:40 27 4
gpt4 key购买 nike

我将尝试将这种情况作为一个最小的例子来呈现:

假设我们有一张票证表,定义如下:

CREATE TABLE ticket_id_list (
ticket_id NUMBER,
issued_to VARCHAR2(100),
CONSTRAINT ticket_id_list_pk PRIMARY KEY (ticket_id)
);

系统使用了一段时间,将数据添加到表中:
INSERT INTO ticket_id_list (ticket_id, issued_to)
VALUES (1, 'Arthur');
INSERT INTO ticket_id_list (ticket_id, issued_to)
VALUES (2, 'Ford');

稍后,弹出以下要求:

We need to store a reference number to some other thing in the ticket table this point onwards. The reference needs to be non null. But old records must have NULL values.



(愚蠢的好像这个声音,这是一个真正的要求。)

现在,如果我们这样做:
ALTER TABLE ticket_id_list
ADD ref_no VARCHAR2(6) NOT NULL;

约束将立即被违反,我们将得到: ORA-01758: table must be empty to add mandatory (NOT NULL) column .

我们当然可以在业务逻辑中添加检查,但这很麻烦。由于无法解释的原因,我们不能使用默认值。有没有办法到 添加仅适用于新记录的 NOT NULL 约束?

最佳答案

您可以添加一个检查约束,其中某个日期之后的值不能为空;就像是:

alter table ticket_id_list
add constraint nul_ref
check (ticket_id < 123456 or ref is not null);

这确实假定 ticket_id 只会随着时间的推移而上升,如果您的表中碰巧有一个日期字段,那么使用它可能会更清楚。

关于sql - 使 NOT NULL 约束仅适用于新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073517/

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