本人初学数据库,遇到两道关于SQL的题,请高手指点下,谢谢。

本人初学数据库,遇到两道关于SQL的题,请高手指点下,谢谢。,第1张

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列名中的 性别,只能填写"男"或"女"等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9448775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存