1.简单
在事务中,COMMIT 的作用是什么?
- A锁定整个数据库
- B新建一个表
- C撤销自事务开始以来所做的全部更改
- D使事务中的所有更改永久生效
2.简单
哪个子句在分组之前过滤行?
- AGROUP BY
- BHAVING
- CWHERE
- DORDER BY
3.简单
哪条语句向已有的表中添加新列?
- AUPDATE TABLE
- BALTER TABLE
- CCREATE COLUMN
- DINSERT COLUMN
4.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A返回表中的所有行
- B在每种数据库中都报错
- C只返回 col 为 NULL 的行,与 IS NULL 相同
- D不返回任何行,因为比较结果是未知
5.中等
表 a 有 3 行,表 b 有 4 行。SELECT * FROM a CROSS JOIN b 返回多少行?
- A7
- B4
- C12
- D3
6.中等
对于电话号码为 NULL 的客户,SELECT COALESCE(phone, 'unknown') FROM customers 返回什么?
- A报错
- B'unknown'
- C空字符串
- DNULL
7.困难
一个表有一百万行,布尔列 is_active 中有 95% 为 TRUE。为什么对于 WHERE is_active = TRUE,优化器可能不使用 is_active 上的索引?
- A大多数行都匹配,因此全表扫描比大量索引查找更便宜
- B不能在布尔列上创建索引
- C优化器从不在 WHERE 子句中使用索引
- D索引把 TRUE 当作 NULL 处理
8.困难
在多版本并发控制(MVCC)下,读取者如何避免阻塞写入者?
- A读取者直接读取未提交的数据
- B读取者总是等到所有写入者都提交
- C读取者看到已提交行版本的一致快照,而写入者创建新版本
- D只要有读取者在活动,就不允许写入
答案
- 1. D · 使事务中的所有更改永久生效
- 2. C · WHERE
- 3. B · ALTER TABLE
- 4. D · 不返回任何行,因为比较结果是未知
- 5. C · 12
- 6. B · 'unknown'
- 7. A · 大多数行都匹配,因此全表扫描比大量索引查找更便宜
- 8. C · 读取者看到已提交行版本的一致快照,而写入者创建新版本
完整分步解答:请在 examproblems.com 上练习本主题。