create table STAFF
(StaffID TINYINT IDENTITY NOT NULL,
fName varchar(20) NOT NULL,
lname varchar(20) NOT NULL,
Phone varchar(10) NOT NULL,
Gender char(01),
DoB date NOT NULL,
Mentor TINYINT,
Payment_ID TINYINT NOT NULL,
constraint staff_pk primary key (StaffID),
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID),
constraint mentor_fk foreign key (Mentor) references staff(StaffID)
对于“性别”列,我只想插入“M”,“F”,“O”字符。 我该怎么办“WITH CHECK OPTION”
答案 0 :(得分:2)
我认为你不想with check option
。您需要check
约束:
alter table staff
add constraint chk_staff_gender check (gender in ('M', 'F', 'O'));
(您也可以将其放在create table
声明中。)
with check option
是视图上的一个选项,可确保数据保持一致,即使基础表中的数据发生更改(请参阅here)。
答案 1 :(得分:1)
添加, constraint gender_chk check (Gender in ('M','F','O'))
默认情况下,带检查选项已启用。
create table STAFF
(StaffID TINYINT IDENTITY NOT NULL,
fName varchar(20) NOT NULL,
lname varchar(20) NOT NULL,
Phone varchar(10) NOT NULL,
Gender char(01),
DoB date NOT NULL,
Mentor TINYINT,
Payment_ID TINYINT NOT NULL,
constraint staff_pk primary key (StaffID)
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID),
constraint mentor_fk foreign key (Mentor) references staff(StaffID)
, constraint gender_chk check (Gender in ('M','F','O'))
)
从MSDN Documentation for ALTER TABLE
(强调添加):
WITH CHECK |没有检查 指定是否针对新添加或重新启用的FOREIGN KEY或CHECK约束验证表中的数据。如果未指定,则假定 WITH CHECK用于新约束,并且假定对于重新启用的约束使用WITH NOCHECK。
如果您不想针对现有数据验证新的CHECK或FOREIGN KEY约束,请使用WITH NOCHECK。除极少数情况外,我们不建议这样做。将在所有后续数据更新中评估新约束。添加约束时由WITH NOCHECK抑制的任何约束违规可能会导致将来更新失败,如果他们使用不符合约束的数据更新行。
查询优化器不考虑使用NOCHECK定义的约束。在使用ALTER TABLE表WITH CHECK CHECK CONSTRAINT ALL重新启用它们之前,将忽略此类约束。
答案 2 :(得分:1)
您正在引用check constraint
create table STAFF
(StaffID TINYINT IDENTITY NOT NULL,
fName varchar(20) NOT NULL,
lname varchar(20) NOT NULL,
Phone varchar(10) NOT NULL,
Gender char(01) NOT NULL,
DoB date NOT NULL,
Mentor TINYINT,
Payment_ID TINYINT NOT NULL,
constraint staff_pk primary key (StaffID),
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID),
constraint mentor_fk foreign key (Mentor) references staff(StaffID),
constraint Gender_ck check (Gender in ('M','F','O'))
)
“WITH CHECK OPTION”是view definition的可选条款 通过视图更新/插入记录的任何尝试都无法通过视图选择,这将引发错误。