【发布时间】:2014-08-01 05:38:52
【问题描述】:
我将尝试将这种情况作为一个最小的例子来介绍:
假设我们有一张票表,定义如下:
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');
稍后,弹出以下要求:
从现在开始,我们需要在票证表中存储其他东西的参考号。引用必须是非空。但旧记录必须具有
NULL值。
(蠢得好像这个声音,这是一个真正的要求。)
现在如果我们这样做:
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 约束?
【问题讨论】:
标签: sql oracle constraints