1、
ALTER TABLE 采购定单表
ADD CONSTRAINT chk_采购定单表_付款方式
CHECK ( 付款方式 IN ( '牡丹卡', '金穗卡', '龙卡', '阳光卡' ) );
如果书中提供示例是:
NOT (付款方式='xyk') OR (xyk IN ('牡丹卡','金穗卡','龙卡','阳光卡'))
那么可以看出, 采购定单表 中有 “付款方式” 与 “xyk” 这两列。
也就是 约束条件为
NOT (付款方式='xyk')
意思是: 付款方式不是 xyk。
OR (xyk IN ('牡丹卡','金穗卡','龙卡','阳光卡'))
意思就是: 付款方式是 xyk的情况下, xyk需要是哪些 卡。
至于你觉得应该是:(付款方式='xyk') AND (xyk IN ('牡丹卡','金穗卡','龙卡','阳光卡'))
那么这个 付款方式, 只能是 xyk了, 你要支付现金的话, 没法处理了。
2、D
原因:
排除法分析。
假如 学生表的 Scode = '001201' 的数据, 在 Score 表里面 , 一行数据也没有。
那么更新是不会出错的。 因此 A 不正确。
Scode列是 主键, 因此, 不会更新2行数据, 因此 B 不正确。
如果 存在有 Scode = '001201' 的数据, 且 Score 表存在一行关联数据。
并且 这个外键是 UPDATE CASCADE 的情况下。
那么 更新 Students 表, 会同时更新 Score 表。
但是由于不知道是什么数据库。
因为 Oracle 和 DB2 , 好像是不支持 UPDATE CASCADE 的。
SQL Server, MySQL, SQLite , PostgreSQL 支持 UPDATE CASCADE 。
但是题目上面没有明确说明, 这个外键是 UPDATE CASCADE
因此这个 C 只能是 如果其他几个都错的情况下, 才选择 C
如果 存在有 Scode = '001201' 的数据, 且 Score 表无数据,那么就会更新一行数据。
如果不存在 Scode = '001201' 的数据, 那么一行也不会更新。
因此, 可能会更新Students表中的一行数据。
也就是最后
如果题目是 单选的话, 就选D。
多选的话, 如果明确 不是 Oracle 或者 DB2 数据库的, 可以选择 C, D
数据库的检查约束相当于一个企业的大门保安,有合法身份的人进行,不合法人的则拒绝,在数据库中检查约束通过check关键字实现,如果一般情况也可以通过管理工具编写一个表达式实现,现通过在sqlserver中通过代码实现,如成绩表中的成绩规定为0到100分,如果录入数据不在此范围,则报错,具体写法如下:
create table 成绩表
(成绩 real null
constraint ck_成绩 check(成绩〉=0 and 成绩<=100)
)
进入设计表,右键,选择“CHECK 约束”,新建约束,“sex=‘男'”或"sex='女'就行了!
不知道性别列的列名是什么,这里假设为psex,所以其check约束表达式为:
psex = '男' or psex = '女'
注意:单引号必须为英文半角的。
以上就是关于本人初学数据库,遇到两道关于SQL的题,请高手指点下,谢谢。全部的内容,包括:本人初学数据库,遇到两道关于SQL的题,请高手指点下,谢谢。、谁能准确讲述一下数据库的检查约束、SQL CHECK约束表达式 就比如 sex列名中的 性别,只能填写"男"或"女"等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)