如何将一组列约束为全部为 NULL 或全部为 NOT NULL
How to constrain a set of columns to all be NULL or all be NOT NULL
假设我有一个像这样的 table,
id | first name | middle name | last name
现在,name
列可以是 NULL
,但是如果这三个中的任何一个,例如 first name
是 NOT NULL
,那么这三个都必须是 NOT NULL
.
我如何在 Oracle 中执行此操作?
说,
alter table your_table
add constraint set_of_column_chk
check (nvl2(first_name, 1, 0) + nvl2(middle_name, 1, 0) + nvl2(last_name, 1, 0) in (0, 3));
您可以根据需要的逻辑编写检查约束。
例如:
alter table yourTable
add constraint check_not_null check
(
first_name is not null and
middle_name is not null and
last_name is not null
OR
first_name is null and
middle_name is null and
last_name is null
);
假设我有一个像这样的 table,
id | first name | middle name | last name
现在,name
列可以是 NULL
,但是如果这三个中的任何一个,例如 first name
是 NOT NULL
,那么这三个都必须是 NOT NULL
.
我如何在 Oracle 中执行此操作?
说,
alter table your_table
add constraint set_of_column_chk
check (nvl2(first_name, 1, 0) + nvl2(middle_name, 1, 0) + nvl2(last_name, 1, 0) in (0, 3));
您可以根据需要的逻辑编写检查约束。 例如:
alter table yourTable
add constraint check_not_null check
(
first_name is not null and
middle_name is not null and
last_name is not null
OR
first_name is null and
middle_name is null and
last_name is null
);