理解数据库:脏读、SQL查询与外键约束详解

需积分: 0 0 下载量 169 浏览量 更新于2024-08-05 收藏 179KB PDF 举报
本资源是一份天津大学软件工程专业《数据库原理》期末考试试卷,涵盖了数据库基础知识的考察。以下是针对部分题目解析的相关知识点: 1. **脏读**的概念: 脏读是指在并发环境下,一个事务读取到了另一个事务未完成更新的数据,导致其看到的结果不一致。这发生在事务A读取了事务B未提交的数据后,事务B更新了数据,但事务A在事务结束时发现数据已被改变,这种情况违反了事务的一致性原则。选项C描述了一个事务读取其他事务未提交数据的情况,符合脏读的定义。 2. **SQL查询结果行数**: 题目中给出的SQL查询是`SELECT distinct student_name FROM names, marks`,由于使用了`DISTINCT`关键字,会去除重复的学生名字。结合表`names`和`marks`,假设没有重复的学生名字,即使两表的组合看似有重复,实际结果应该是学生名字的唯一集合,所以答案应该是学生名字的总数,具体数量取决于`names`表中学生的唯一数目,题目中没有提供这个信息,因此无法确定是A(9)、B(20)还是C(5)或D(6)。需要知道两个表的关联关系或`names`表的大小才能准确计算。 3. **表`tab1`约束检查**: 选项A中的`col1`值0不在约束条件1,2,3,4中,因此不会成功;选项B的`NULL`值也不满足`INTEGER NOT NULL`约束;选项D的'abcdefhijklmnopq'超出了`col2`的CHAR(3)长度限制。只有选项C的`(4,'a')`符合所有约束条件,因此会成功插入。 4. **外键引用规则**: 选项A描述的是外键可以是参照关系中主键的真子集,这是正确的,因为外键通常用于保证数据的一致性;选项B错误,外键可以与主键属性名称不同;选项C强调了数据类型完全相同,这是不准确的,因为不同类型的数据可以进行适当转换或映射;选项D提到外关键字属性不能为空,这也是外键约束的一部分,但并不是所有数据库系统都要求外键属性一定非空,具体情况取决于数据库设计。 5. **表T1和T2的查询操作**: 题目要求找出`T1`中不存在于`T2`中的记录,`MINUS`和`EXCEPT`通常用于排除操作,但是SQL中没有`MINUS`关键字,而是使用`LEFT JOIN`或者`EXCEPT`。如果`T1`和`T2`没有相同的`C1`值,那么`SELECT * FROM T1 WHERE NOT EXISTS (SELECT * FROM T2 WHERE T1.C1 = T2.C1)` 或 `SELECT T1.* FROM T1 EXCEPT SELECT T2.* FROM T2 WHERE T1.C1 = T2.C1` 可能得到结果,但具体结果取决于两表之间的关系。 总结来说,这份试卷主要测试了数据库的基本概念、SQL查询的理解、表结构设计、事务一致性以及SQL操作等知识点,解答这些问题需要对数据库理论和实践应用有深入理解。