示例:按唯一名称和电子邮件地址键控的表,带有"类型"列"类型"列可以有"原始"、"工作"、"个人"您可以有多封工作和个人电子邮件,但只有一封原始电子邮件我使用的是DB2foriSQL,我想使用UNIQUE或CHECK约束来约束数据,但不确定如何实现这个数据集。
Scott scott@hotmail.com Original
Scott scott@gmail.com Personal
Scott scott@live.com Personal
Scott scott@NBC.com Work
Scott scott@ABC.com Work
Scott scott@yahoo.com Original
我想确定,如果我已经有了原始的hotmail,我就不能把yahoo作为原始的。其余均有效。
如果需要添加更多内容,请告诉我。
如果您有用于IBM i的Db2,那么您可以使用相应的WHERE
子句创建一个UNIQUE INDEX。
CREATE TABLE TEST_IND_EXPR
(
NAME VARCHAR (20) NOT NULL
, EMAIL VARCHAR (20) NOT NULL
, TYPE VARCHAR (20) NOT NULL
);
CREATE UNIQUE INDEX TEST_IND_EXPR1 ON TEST_IND_EXPR (NAME, EMAIL);
CREATE UNIQUE INDEX TEST_IND_EXPR2 ON TEST_IND_EXPR (NAME, TYPE) WHERE TYPE = 'Original';
INSERT INTO TEST_IND_EXPR VALUES ('Scott', 'scott@hotmail.com', 'Original');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', 'scott@gmail.com', 'Personal');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', 'scott@live.com', 'Personal');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', 'scott@yahoo.com', 'Original');
最后一条语句返回SQL0803
,因为此行违反了TEST_IND_EXPR2
索引的唯一性。