1、采购定单表中的付款方式是信用卡,约束要求只能是牡丹卡、金穗卡、龙卡、或者阳光卡,如何编写约束表达式?
2、假设Students表中有主键Scode列,Score表中有外键SID列,SID引用Scode列来实施引用完整性约束,此时如果使用T-SQL:
UPDATE Students SET Scode = '001201' WHERE Scode = '01201'
来更新Students表的Scode列,可能的运行结果是()
A 肯定会产生更新失败
B 可能会更新Students表中的两行数据
C 可能会更新Score表中的一行数据
D 可能会更新Students表中的一行数据
对于第1题,书中提供示例是:NOT (付款方式='信用卡') OR (信用卡 IN ('牡丹卡','金穗卡','龙卡','阳光卡'))
但是我觉得应该是:(付款方式='信用卡') AND (信用卡 IN ('牡丹卡','金穗卡','龙卡','阳光卡'))
我学得是SQL Sever
如果是ON UPDATE CASCADE,并且存在Scode = '01201',应该两个表都有一行更新吧?
对的, 如果是 SQL Server 的话。
外键是 ON UPDATE CASCADE 的情况下。
那么
UPDATE Students SET Scode = '001201' WHERE Scode = '01201'
将同时把
Score 表的 Scode = '001201' 的数据, 也更新为 '01201'
如果外键不是ON UPDATE CASCADE,或者不存在Scode = '01201',那么就会更新失败,是吗
追答如果 Score 表 没有 Scode = '01201' 的数据。
那么 Students 表将正常更新, 不会失败啊。
如果 外键不是 ON UPDATE CASCADE 的, 并且 Score 表有 Scode = '01201' 的数据。
UPDATE Students SET Scode = '001201' WHERE Scode = '01201' 才会失败!
我的意思是,如果Scode = ‘01201’不存在,那么WHERE不就匹配不到了吗,这样不会出错吗?
可以百度Hi一下我吗
我现在要
UPDATE Students SET Scode = '001201' WHERE Scode = '01201'
更新 学号为 '001201' 的 学生的 数据。
这个学生从来没有参加过考试, 因此 Score 表 没有 Scode = '01201' 的数据。
那么我这个操作, 只修改 Students 表, 为什么要出错?
如果 Students 表, 连 Scode = '01201' 的数据也没有。
那么也就是这个学生都不存在。
那么语句执行成功, 但是会提示你, 更新了 0 行数据。
只有 Students 有一行 '001201' 的 学生的 数据。
这个学生, 又参加了一门考试。 那么 Score 表就会有一行 Scode = '01201' 的数据。
外键又是默认的外键, 不带 ON UPDATE CASCADE 的。
这个时候, 你尝试
UPDATE Students SET Scode = '001201' WHERE Scode = '01201'
数据库就会先检查。
发现
如果把学生表的 Scode = '01201' 的数据, 修改为 Scode = '001201'
那么会导致 Score 表 会有一行 Scode = '01201' 的 孤儿数据。
也就是 以后就不知道 这个 成绩, 是哪一个学生的成绩了。
那么就要抱错, 并提示你, 不允许修改。