本资源为新版MySQL 8.0认证考试(1Z0-908)备考资料,包含182页全面详细的考题解析与考点总结,助您高效复习顺利通过。
### MySQL 8.0 认证 1Z0-908 考题解析
#### 1. MySQL 代理用户授权与验证
**题目**:
```sql
mysql> GRANT PROXY ON accounting@localhost TO @% ;
mysql> SELECT USER(), CURRENT_USER(), @@proxy_user;
```
选项及正确答案:
- A) The user failed to define a username and the connecting username defaulted to @%.
- B) The user is authorized as the rsmith@localhost user.
- C) The user is authenticated as the anonymous proxy user @%.
- D) The user is logged in with --user=accounting as an option.
- E) The user is authorized as the accounting@localhost user.
**正确答案**:E
**解析**:
在MySQL中,`GRANT PROXY`语句用于授权一个用户(代理用户)代表另一个用户(被代理用户)进行连接。在这个例子中,`accounting@localhost`被授予给匿名用户` @%`作为代理。当我们执行`SELECT USER(), CURRENT_USER(), @@proxy_user;`时,`CURRENT_USER()`返回的是实际登录并执行命令的用户,也就是代理用户,因此结果应该显示出被授权为 `accounting@localhost`。
- **A选项**:不正确,因为这里定义了用户名 `accounting@localhost`。
- **B选项**:不正确,因为没有提到 `rsmith@localhost` 这个用户。
- **C选项**:不正确,因为匿名代理用户不能作为登录用户。
- **D选项**:不正确,虽然可以使用 `--user=accounting` 登录,但这并不是查询结果所显示的。
**结论**:正确答案是E,用户被授权为 `accounting@localhost`。
#### 2. 死锁检测
**题目**:
选择两种能够获取死锁信息的操作方法。
选项:
- A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client.
- B) Enable the innodb_status_output_locks global parameter.
- C) Enable the innodb_print_all_deadlocks global parameter.
- D) Run the SHOW ENGINE INNODB STATUS command from the mysql client.
- E) Use the sys.innodb_lock_waits view.
**正确答案**:C 和 D
**解析**:
- **A选项**:`SHOW ENGINE INNODB MUTEX` 命令主要用于查看 InnoDB 引擎内部的一些同步状态,并不是用来查看死锁信息的。
- **B选项**:`innodb_status_output_locks` 参数用于控制是否在 InnoDB 状态报告中包含锁等待信息,但不会直接记录或显示死锁信息。
- **C选项**:`innodb_print_all_deadlocks` 当启用此参数时,InnoDB 会在 mysqld 错误日志中记录所有事务中的死锁信息。这是一个有效的方法来获取死锁的详细信息。
- **D选项**:`SHOW ENGINE INNODB STATUS` 命令可以显示 InnoDB 引擎的状态信息,包括最近一次的死锁信息。这是一个常用的检查死锁的命令。
- **E选项**:`sys.innodb_lock_waits` 视图提供了关于当前锁定等待的信息,但它并不直接提供死锁信息。
**结论**:正确答案是 C 和 D,通过设置 `innodb_print_all_deadlocks` 参数和运行 `SHOW ENGINE INNODB STATUS` 命令可以有效地获取死锁信息。
#### 3. 提升查询性能
**题目**:
考虑以下执行成功的 SQL 语句:
```sql
SELECT Name FROM world.city WHERE Population BETWEEN 1000000 AND 2000000;
```
为了提高这个查询的性能,同时减少访问的行数,应采取哪种措施?
选项:
- A) ALTER TABLE world.city ADD INDEX (Name);
- B) ALTER TABLE world.city ADD SPATIAL INDEX (Name);
- C) ALTER TABLE world.city ADD FULLTEXT INDEX (Name);
- D) ALTER TABLE world.city ADD INDEX (Population);
**正确答案**:D
**解析**:
这个问题的关键在于如何通过添加索引来优化基于 `Population` 字段的查询。由于查询条件涉及到 `Population` 字段的范围查询,因此最合适的优化方式是在 `Population` 字段上创建索引。
- **A选项**:在 `Name` 字段上创建索引并不能帮助我们加速基于 `Population` 字段的查询。
- **B选项**:空间索引主要用于地理数据,对于非空间数据类型如 `Population` 并无帮助。
- **C选项**:全文索引主要用于全文本搜索,对于数值类型的字段如 `Population` 并无优化效果。
- **D选项**:在 `Population`