我需要创建一个检查约束,我面临的问题是约束接受的值列表在未来会发生变化(例如:现在“红色,绿色和蓝色”在下个月“红色,绿色,蓝色和白色” )。这该怎么做 ?
您应该使用外键约束来执行此操作。
您可以使用以下定义创建检查约束
CREATE TABLE T
(
Color varchar(10) CHECK (Color in ('red','green','blue'))
)
Run Code Online (Sandbox Code Playgroud)
但是没有办法改变检查约束定义而不删除它并重新创建它(因此需要根据新定义重新验证所有行)
要修改
CHECK约束,您必须首先删除现有CHECK约束,然后使用新定义重新创建它。
这与外键约束无关
CREATE TABLE Colors
(
Color VARCHAR(10) PRIMARY KEY
)
INSERT INTO Colors
VALUES ('red'),
('green'),
('blue')
CREATE TABLE T
(
Color VARCHAR(10) REFERENCES Colors
)
Run Code Online (Sandbox Code Playgroud)
虽然我可能会在Colors表中引入一个代理键,而不是在主表中重复存储字符串。
我之前遇到过一个论点,即使用检查约束在某种程度上比使用外键和查找表“更正确”,但查找表对我的优势是。
注意:可以让检查约束引用一个标量 UDF,而该标量 UDF 又引用一个表,但应避免这种方法。它没有正确模拟外键(例如不验证DELETE FROM Colors)
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |