# Exam PingCAP Certified SQL Developer (A) TiDB v6.x

### 1. 以下关于 MVCC 依赖的技术的陈述中哪些项是正确的？（选择两项）
+ 选项
  + A. 快照
  + B. Timestamp Oracle
  + C. 在 TiKV 的 Key/Value Pair 的 Key 上加入版本号
  + D. Past image
+ 答案: B, C

### 2. 以下哪种 TiDB 实例是无状态的？
+ 选项
  + A. Placement Driver Server
  + B. TiKV Server
  + C. TiDB Server
  + D. MVCC Server
+ 答案: C

### 3. TiKV 不能作为独立的数据库使用。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 4. 在集群中的任意 TiKV Server 所在节点发生故障之后, TiDB Server 实例就无法访问数据了, 必须修复故障的节点，然后整个 TiDB 才能恢复正常。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 5. Placement Driver 向其它 TiDB 组件提供什么信息可以用来保证 TiDB 内部事件的时序?
+ 选项
  + A. Raft Sequence
  + B. MVCC Version
  + C. TXN Sequence
  + D. Timestamp Oracle (TSO)
+ 答案: D

### 6. 在 TiDB 的 TiKV 集群中, Raft Group 复制数据的单位称为？
+ 选项
  + A. Cell
  + B. Region
  + C. Block
  + D. RDD
+ 答案: B

### 7. 如果 TiDB 中所有的 TiDB Server 同时断电并且磁盘损坏, 那么会导致业务数据丢失。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 8. TiDB Server 兼容以下哪个数据库的访问协议?
+ 选项
  + A. MySQL
  + B. Oracle
  + C. DynamoDB
  + D. PostgreSQL
+ 答案: A

### 9. `SELECT COUNT(*) FROM universe.planets` 关于此 SQL 语句, 描述正确的是？ (选择两项)
+ 选项
  + A. 相关任务只能在一个 TiDB Server 上执行, 即用户会话连接到的那个 TiDB Server
  + B. 它可以利用到多个 TiKV Server 并行执行
  + C. 这是典型的 TiDB 分布式 SQL 场景
  + D. 无论 TiKV Server 节点的数量是多少, COUNT 操作只会在 TiDB Server 上被执行一次
+ 答案: B, C

### 10. 以下哪些陈述最能描述 TiDB 相对于传统 RDBMS 的特点？(选择两项)
+ 选项
  + A. 组件解耦, 拥有良好的扩展性, 支持弹性的扩缩容
  + B. 支持 ACID、事务强一致性
  + C. 拥有无状态的前端
  + D. TiDB 集群必须依赖共享存储
+ 答案: A, C

### 11. 实现 TiKV Server 数据持久性的是?
+ 选项
  + A. MariaDB
  + B. MySQL
  + C. TiRow
  + D. RocksDB
+ 答案: D

### 12. TiKV Server 可以解析并执行 SQL 语句。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 13. 以下哪种 TiDB 实例是有状态的？
+ 选项
  + A. Placement Driver Server
  + B. TiRow Server
  + C. TiDB Server
  + D. MVCC Server
+ 答案: A

### 14. 以下哪个组件不属于 TiDB Server?
+ 选项
  + A. Physical Optimizer
  + B. Local Executor
  + C. RocksDB Scheduler
  + D. Distributed Executor
+ 答案: C

  (REMOVE) ### 15. 以下哪些环境不可以运行 TiDB Cluster (包括 Playground 沙箱)? (选择两项)
### 15. 以下关于 Prepared Statement 的陈述，正确的描述是？（选择两项）
+ 选项
  + A. `PREPARE` 命令能够产生执行计划
  + B. `PREPARE` 命令能够将执行计划缓存入 Plan Cache
  + C. `EXECUTE` 命令能够产生执行计划
  + D. `EXECUTE` 命令能够将执行计划缓存入 Plan Cache
+ 答案: C, D

### 16. 以下两个查询 (A) 和 (B) 返回的结果必然相同。
```
tidb> DESC planets;
+-----------------------+---------------+------+------+---------+-------+
| Field                 | Type          | Null | Key  | Default | Extra |
+-----------------------+---------------+------+------+---------+-------+
| id                    | bigint(20)    | NO   | PRI  | NULL    |       |
| name                  | char(20)      | NO   | MUL  |         |       |
| gravity               | decimal(8,1)  | NO   |      | 0.0     |       |
+-----------------------+---------------+------+------+---------+-------+

tidb> DESC moons;
+-----------+---------------+------+------+---------+-------+
| Field     | Type          | Null | Key  | Default | Extra |
+-----------+---------------+------+------+---------+-------+
| id        | bigint(20)    | NO   | PRI  | NULL    |       |
| name      | char(20)      | NO   | MUL  | NULL    |       |
| planet_id | bigint(20)    | NO   |      | NULL    |       |
+-----------+---------------+------+------+---------+-------+

tidb> SELECT min(gravity), max(gravity) FROM planets;
+--------------+--------------+
| min(gravity) | max(gravity) |
+--------------+--------------+
|          0.7 |         23.1 |
+--------------+--------------+
```
```(A)
SELECT p.name as l_name, p.gravity as l_gravity, m.name as r_name
 FROM planets p
 LEFT JOIN moons m
 ON p.id = m.planet_id
 WHERE p.gravity < 10
 ORDER BY 1, 2, 3;
```

```(B)
SELECT p.name as l_name, p.gravity as l_gravity, m.name as r_name
 FROM planets p
 LEFT JOIN moons m
 ON p.id = m.planet_id
 AND p.gravity < 10
 ORDER BY 1, 2, 3;
```

+ 选项
  + A. True
  + B. False
+ 答案: B

### 17. 在什么情况下，以 BIGINT 数据类型 为 Primary Key 的表，会具有 `_tidb_rowid` 字段?
+ 选项: 
  + A. 这种情况不可能发生
  + B. TiDB 中的每个表都有 `_tidb_rowid` 字段
  + C. Priamry key 被声明为 NonClustered
  + D. 无正确答案
+ 答案: C

### 18. 在任何情况下都应该尽量使用 Prepared Statement。
+ 选项:
  + A. True
  + B. False
+ 答案: B

### 19. 描述 UNION 操作正确的是? (选择两项)
+ 选项:
  + A. UNION 操作可以去重
  + B. UNION ALL 操作不会去重
  + C. UNION ALL 可以合并两个列数不同的结果集, 而 UNION 不可以
  + D. UNION 可以合并两个列数不同的结果集, 而 UNION ALL 不可以
+ 答案: A, B

### 20. 以下所有语句均成功执行, 最后的 SELECT 语句能否返回被 INSERT 语句插入的行?
```
BEGIN;
INSERT INTO test.u1 VALUES (100);
BEGIN;
ROLLBACK;
SELECT * FROM test.u1;
```
+ 选项:  
  + A. 可以
  + B. 不可以
+ 答案: A


### 21. 您正在为一个银行系统设计表结构，您将选择哪种数值数据类型来存储用户账户余额？
+ 选项
  + A. BIGINT
  + B. DECIMAL
  + C. FLOAT
  + D. DOUBLE
+ 答案: B

### 22. LIKE 和 RLIKE 都能利用到 TiKV 表达式下推。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 23. 以下查询是无法成功执行的, 这个描述是否正确?  
```
tidb> DESC universe.planets;
+-----------------------+---------------+------+------+---------+-------+
| Field                 | Type          | Null | Key  | Default | Extra |
+-----------------------+---------------+------+------+---------+-------+
| id                    | bigint(20)    | NO   | PRI  | NULL    |       |
| name                  | char(20)      | NO   | MUL  |         |       |
+-----------------------+---------------+------+------+---------+-------+

tidb> DESC universe.moons;
+-----------+---------------+------+------+---------+-------+
| Field     | Type          | Null | Key  | Default | Extra |
+-----------+---------------+------+------+---------+-------+
| id        | bigint(20)    | NO   | PRI  | NULL    |       |
| name      | char(20)      | NO   | MUL  | NULL    |       |
+-----------+---------------+------+------+---------+-------+
```
```
SELECT name from universe.planets p join universe.moons m WHERE p.id = m.planet_id;
```
+ 选项
  + A. True
  + B. False
+ 答案: A



### 24. 不考虑 DDL 语句的情况下, AUTO_INCREMENT 属性可以确保字段值按 INSERT 的时间顺序单调增长。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 25. 查询 `SELECT now() WHERE null = null` 它的返回结果是?
+ 选项
  + A. 错误
  + B. 警告，并且返回空结果
  + C. 系统当前 TIMESTAMP
  + D. 返回 NULL
  + E. 系统当前 DATETIME
+ 答案: D

### 26. 以下哪个属性能够缓解 Primary Key 在 TiKV Region 上的写入热点问题？
+ 选项
  + A. LAST_INSERT_ID
  + B. AUTO_RANDOM
  + C. AUTO_INCREMENT
  + D. AUTO_SHARD
+ 答案: B

### 27. 在事务中进行数据修改时 (INSERT, UPDATE, DELETE), FOREIGN KEY 约束会在事务的哪个阶段检查校验?
+ 选项
  + A. FOREIGN KEY 约束不会被强制检查
  + B. 当 DML 命令执行时
  + C. 当事务 COMMIT 时
  + D. 如果不把 tidb_disable_txn_auto_retry 设置为 OFF, FOREIGN KEY 约束就不会被检查
+ 答案: A

### 28. 根据已知信息判断。表 STUDENTS 没有更新，以下 SQL 语句能确保反复执行后输出结果集顺序不变的是? (选择两项)
+ 选项
  + A. `SELECT name, _tidb_rowid FROM students WHERE score < 60;`
  + B. `SELECT name, _tidb_rowid FROM students WHERE score < 60 ORDER BY name;`
  + C. `SELECT name, _tidb_rowid FROM students WHERE score < 60 ORDER BY _tidb_rowid;`
  + D. `SELECT name, _tidb_rowid FROM students WHERE score < 60 LIMIT 3;`
  + E. `SELECT name, _tidb_rowid FROM students WHERE score < 60 ORDER BY name, _tidb_rowid;`
+ 答案: C, E

### 29. 以下哪种方式可用来声明最长 9 位数的整数?
+ 选项
  + A. SMALLINT
  + B. INT
  + C. INT(9)
  + D. BIGINT(9)
  + E. 无正确答案
+ 答案: E

  (REMOVE) ### 30. 以下哪种方式可用来声明最长 9 位数的整数?
### 30. 启用了 TiFlash 之后, 为了使分析型查询从列存读取数据，必须使用 HINT。 
+ 选项
  + A. True
  + B. False
+ 答案: B

### 31. 查询 `1.1E0 + 2.2E0 = 3.3E0` 的输出是?
+ 选项
  + A. 可能是 0
  + B. 一定是 1
  + C. 会警告
  + D. 会报错
+ 答案: A

  (REMOVE) ### 32. 当 Collation 是 utf8mb4_general_ci 时, 以下哪个答案是升序排列 A,B,C,a,b,c,1,2,3,+ 的正确结果?
### 32. TiDB 采取默认设置，几天前你通过命令 `CREATE SEQUENCE test.seq1;` 创建了一个 SEQUENCE，你并不清楚它的使用情况。现在，除了你以外没有其它任何会话会使用 `test.seq1`。 下正确的陈述是? （选择两项）
+ 选项
  + A. 当你连接到 TiDB Server 1 上执行 `SELECT NEXTVAL(test.seq1);` 观察到的返回是 1500，紧接着你在 TiDB Server 2 上执行 `SELECT NEXTVAL(test.seq1);` 的返回一定大于 1500。
  + B. 当你连接到 TiDB Server 1 上执行 `SELECT NEXTVAL(test.seq1);` 观察到的返回是 10，紧接着你在 TiDB Server 2 上执行 `SELECT NEXTVAL(test.seq1);` 的返回不一定大于 10。
  + C. 当你连接到 TiDB Server 1 上执行 `SELECT NEXTVAL(test.seq1);` 观察到的返回是 1500，紧接着你在 TiDB Server 2 上执行 `SELECT NEXTVAL(test.seq1);` 的返回不一定大于 1500。
  + D. 当你连接到 TiDB Server 1 上执行 `SELECT NEXTVAL(test.seq1);` 观察到的返回是 10，紧接着你在 TiDB Server 2 上执行 `SELECT NEXTVAL(test.seq1);` 的返回一定大于 10。
+ 答案: C, D

### 33. SQL 语句 `SELECT NULL = NULL, '' = '   '` 的返回是？（注意观察空格）
+ 选项
  + A. 0, 0
  + B. 1, 1
  + C. 1, 0
  + D. NULL, 1
+ 答案: D

### 34. 哪些 SQL_MODE 会使下面的查询无法运行？（选择两项）
```
SELECT category_id, gravity, max(mass) FROM planets GROUP BY category_id;
```
+ 选项
  + A. ORACLE
  + B. ONLY_FULL_GROUP_BY
  + C. ANSI
  + D. 无正确答案, 该 SQL 存在错误, 无法被执行。
+ 答案: B,C

### 35. 以下哪种方式可用来声明最长为 9 比特的数据类型?
+ 选项
  + A. SMALLINT
  + B. BINARY(9)
  + C. BIT(9)
  + D. BLOB(9)
  + E. 无正确答案
+ 答案: C

### 36. 以下创建 TABLE 的命令，不能被执行。
```
CREATE TABLE t1 (id INT PRIMARY KEY, steps ENUM(10, 20, 30));
```
+ 选项
  + A. True
  + B. False
+ 答案: A

### 37. 关于 MEDIUMTEXT 数据类型, 描述正确的是？
+ 选项
  + A. MEDIUMTEXT 数据类型和 CHAR 数据类型没有区别
  + B. raft-entry-max-size 是影响它最大长度的因素之一
  + C. MEDIUMTEXT 的最长长度是 2GB
  + D. LIKE 无法对 MEDIUMTEXT 的字段进行模糊匹配
+ 答案: B

  (REMOVE) ## 38. 关于 LONGTEXT 数据类型, 描述正确的是？
### 38. 以下哪些陈述正确描述了 TiDB 的时区？（选择两项）
+ 选项
  + A. 当没有设置全局时区 time_zone 时，默认的 time_zone 使用 system 时区
  + B. NOW() 返回值受时区影响, CURTIME() 返回值不受时区影响
  + C. DATETIME 和 TIMESTAMP 数据类型包含时区信息，DATE 和 TIME 数据类型不包含时区信息
  + D. 每个会话可以通过 time_zone 参数设置当前会话的时区
+ 答案: A, D

### 39. 关于 CHAR 数据类型, 描述正确的是？
+ 选项
  + A. CHAR(10) 表示变长 10 个字节
  + B. CHAR(10) 表示定长 10 个字节
  + C. CHAR(10) 表示变长 10 个字符
  + D. CHAR(10) 表示定长 10 个字符
+ 答案: D

### 40. SQL 查询 `SELECT 'A ' = ' A'` 的结果是? (留意空格)
+ 选项
  + A. 0
  + B. 1
  + C. 报错
  + D. 警告
+ 答案: A

### 41. 当 Collation 是 utf8mb4_binary 时, 以下哪个答案是降序排列 "A","B","C","a","b","c","1","2","3","+" 的正确结果?
+ 选项
  + A. c b a C B A 3 2 1 +
  + B. C B A c b a 3 2 1 + 
  + C. 3 2 1 + C B A c b a
  + D. + 3 2 1 c b a C B A
+ 答案: A

### 42. 默认情况下, 查询 `SELECT 8/0;` 的结果是?
+ 选项
  + A. NaN
  + B. NULL
  + C. 0
  + D. 报错
+ 答案: B

### 43. 当你需要实现分页查询时, 出于对性能的考虑, 最佳实践是使用 `ORDER BY ... LIMIT <offset>, <n>` 的用法。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 44. 查看执行计划的两个语句: EXPLAIN 和 EXPLAIN ANALYZE 功能相同。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 45. SQL 语句 `SELECT CONCAT_WS(NULL,'Hello',' World'), CONCAT('Hello',NULL,' World');` 返回是?
+ 选项
  + A. NULL, Hello World
  + B. NULL, NULL
  + C. Hello World, NULL
  + D. World, NULL
+ 答案: B

### 46. 默认情况下, `SELECT 'Welcome'||' to '||'TiDB!'` 返回?
+ 选项
  + A. 报错
  + B. 警告，并返回 0
  + C. Welcome to TiDB!
  + D. NULL
+ 答案: B

### 47. 以下哪项不属于 TiDB 的数据类型？
+ 选项
  + A. DATETIME
  + B. TIME
  + C. INTERVAL
  + D. YEAR
+ 答案: C

### 48. 找到在每个类别(category_id)中质量(mass)最大的行星。请选择两个最佳答案。(选择两项)
```
tidb> DESC planets;
+-----------------------+---------------+------+------+---------+----------------+
| Field                 | Type          | Null | Key  | Default | Extra          |
+-----------------------+---------------+------+------+---------+----------------+
| id                    | bigint(20)    | NO   | PRI  | NULL    | auto_increment |
| name                  | char(20)      | NO   | MUL  |         |                |
| mass                  | float         | NO   |      | 0.0     |                |
| category_id           | int(11)       | NO   |      | NULL    |                |
+-----------------------+---------------+------+------+---------+----------------+
```
+ 选项
  + A. 
    ```
    SELECT p.name, p.mass, category_id
    FROM planets p
    WHERE p.mass = MAX(mass)
    GROUP BY category_id;
    ```
  + B.
    ```
    SELECT p.name, p.mass
    FROM planets p
    JOIN (SELECT category_id, MAX(mass) as max_mass
          FROM planets
          GROUP BY category_id
          ) c
    ON p.category_id = c.category_id
    AND p.mass = c.max_mass;
    ```
  + C. 
    ```
    SELECT p.name, p.mass
    FROM planets p
    WHERE p.mass = (SELECT MAX(mass)
                      FROM planets
                      WHERE category_id <=> p.category_id
                   );
    ```
  + D.
    ```
    SELECT p.name, p.mass
    FROM planets p
    JOIN (SELECT category_id, MAX(mass) as max_mass
          FROM planets
          ) c
    ON p.category_id = c.category_id
    GROUP BY category_id
    HAVING p.mass = c.max_mass;
    ```
+ 答案: B,C

### 49. DROP DATABASE 操作可以使用 FLASHBACK 命令撤销。前提是在 GC safe point 窗口未关闭前执行。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 50. 在 TiDB 悲观锁模式下, 已禁用 AUTOCOMMIT。 会话 A 对表进行 DML 操作时, 会话 B 也可以对同一张表执行 DDL 操作。
+ 选项
  + A. True
  + B. False
+ 答案: A

### 51. 关于 GLOBAL TEMPORARY TABLE 正确的描述是? (选择全部正确答案)
+ 选项
  + A. 对所有会话都可见
  + B. 表不能与永久表同名
  + C. 当事务结束时，表内数据会被自动清除
  + D. 表的数据仅在当前事务中可见
  + E. 可以通过 information_schema.tables 查询到它
+ 答案: ABCDE

### 52. 你需要创建一个支持三副本的 `PLACEMENT POLICY`, 数据主要保存在西雅图, 远程同步到东京。选择正确的操作。
```
tidb> SHOW PLACEMENT LABELS;
+--------+-------------------------+
| Key    | Values                  |
+--------+-------------------------+
| region | ["tokyo", "seattle"]    |
+--------+-------------------------+
```
+ 选项
  + A. `CREATE PLACEMENT POLICY P1 PRIMARY_CONSTRAINT="seattle" REGIONS="tokyo" FOLLOWERS=3;`
  + B. `CREATE PLACEMENT POLICY P1 PRIMARY_REGION="seattle" REGIONS="tokyo,seattle" FOLLOWERS=3;`
  + C. `CREATE PLACEMENT POLICY P1 PRIMARY_REGION="seattle" CONSTRAINTS="seattle,tokyo" FOLLOWERS=2;`
  + D. `CREATE PLACEMENT POLICY P1 PRIMARY_REGION="seattle" REGIONS="seattle,tokyo" FOLLOWERS=2;`
+ 答案: D

### 53. 在对一张表启用了 CACHE 功能之后, 除了 NOCACHE, 该表无法执行其它变更结构的 DDL 操作。
+ 选项
  + A. True
  + B. False
+ 答案: A

### 54. 以下哪条命令启用了表 t1 的 TiFlash 副本功能？
+ 选项
  + A. ALTER TABLE `t1` ENABLE TIFLASH REPLICA 1; 
  + B. ALTER TABLE "t1" SET TIFLASH REPLICA 1; 
  + C. ALTER TABLE 't1' ENABLE TIFLASH REPLICA 1; 
  + D. ALTER TABLE T1 SET TIFLASH REPLICA 1; 
+ 答案: D

### 55. 当 SQL 命令 `REPLACE INTO` 和 `INSERT ... ON DUPLICATE KEY UPDATE` 对具有 Primary Key 的表操作时, 功能相同。
+ 选项
  + A. True
  + B. False
+ 答案: B

### 56. 执行 `TRUNCATE TABLE` 和 `DROP TABLE` 后丢失的数据都可以被 FLASHBACK 操作挽救, 前提是在 GC safe point 窗口未关闭前执行。
+ 选项
  + A. True
  + B. False
+ 答案: A

### 57. TiDB 支持以下哪些事务隔离级别? (选择两项)
+ 选项
  + A. Read Committed
  + B. Repeatable Read
  + C. Phantom Read
  + D. Serializable
+ 答案: A,B

  (REMOVE) ### 58. TiDB 内的 NULL 值, 不同的 Connector 都能转化为各自语言平台的 NULL 值。
### 58. 以下关于索引的陈述，哪个是正确的描述？
+ 选项
  + A. 二级索引越多越好，便于提升查询的效率。
  + B. 二级索引越多越好，便于提升 DML 的效率。
  + C. 创建索引要谨慎，非必要不创建。
  + D. 只要字段上有索引，并且字段被 WHERE 子句引用，那么查询一定能利用到索引提升效率。
+ 答案: C

### 59. 以下关于 Prepared Statement 优点的陈述中哪一项不正确？
+ 选项
  + A. 解析一次，执行多次。
  + B. 每次 EXECUTE 都能帮助优化器确定最优的执行计划。 
  + C. 减少 PARSE 阶段的 CPU 开销。
  + D. 降低客户端与服务器端的网络通讯流量。
  + E. 缓解了 SQL 注入攻击。
+ 答案: B

### 60. 在一个 Prepared Statement 语句中可以预编译多条 SQL 语句。
+ 选项
  + A. True
  + B. False
+ 答案: B