SQL CHECK约束考试疑问:为何正确选项是D而非A?
SQL CHECK约束逻辑解析:为什么选项D是正确答案?
题目规则回顾
现有Employees表,Country列长度固定3字符,State列最大长度30字符,规则要求:
- 当
Country为'USA'时,State必须是2个字符; - 当
Country为其他值时,State长度可在0-30字符范围内任意取值。
各选项逻辑拆解
选项A:Country = 'USA' AND LEN(State) =2
这个约束的逻辑是只有Country为'USA'且State长度为2的数据才合法。但这会直接拒绝所有Country非'USA'的记录——因为非'USA'时Country = 'USA'为假,整个AND表达式为假,约束不通过,完全违反题目中“非USA时State长度任意”的要求,因此A是错误选项。
选项D:Country <> 'USA' OR LEN(State) =2
逻辑或(OR)的核心是只要任意一个条件为真,整个表达式就为真,对应规则的逻辑如下:
- 当
Country为'USA'时,Country <> 'USA'为假,此时必须满足LEN(State)=2才能让表达式为真,完美匹配“USA时State必须是2字符”的要求; - 当
Country非'USA'时,Country <> 'USA'为真,无论State长度是多少(只要符合表本身的30字符限制),整个表达式都为真,符合“非USA时State长度无限制”的规则。
解答你的疑惑
你担心的“D允许'USA'和长度为4的'FILA'插入”是不存在的:当Country为'USA'时,Country <> 'USA'为假,此时必须满足LEN(State)=2才能让OR表达式为真。如果State长度为4,LEN(State)=2为假,整个表达式为假,约束会阻止这条数据插入。
其他错误选项快速分析
- 选项B:
Country = 'USA' OR LEN(State) =2:会禁止Country非'USA'且State长度不是2的记录,违反规则; - 选项C:
Country <> 'USA' AND LEN(State) = 2:要求非USA时State必须是2字符,直接违反规则。
内容的提问来源于stack exchange,提问作者aleksa21
相关产品推荐
相关产品推荐

