"数据库面试专题及答案.pdf"
在数据库面试中,掌握基本的数据库理论和技术是至关重要的。这里我们探讨一些关键知识点。
首先,MySQL的InnoDB存储引擎支持四种事务隔离级别,它们分别是:
1. **读未提交(Read Uncommitted)**:这是最低的隔离级别,允许事务读取其他事务尚未提交的数据,可能导致脏读、不可重复读和幻读问题。
2. **读已提交(Read Committed)**:在此级别,事务只能看到其他事务已经提交的修改,避免了脏读,但可能仍然存在不可重复读的问题,即同一事务中多次读取同一数据可能会得到不同的结果。
3. **可重复读(Repeatable Read)**:这是MySQL InnoDB的默认隔离级别,它防止了不可重复读,但可能允许幻读,即在同一个事务内,相同的查询可能会返回不同的行。
4. **串行化(Serializable)**:这是最高的隔离级别,完全避免了脏读、不可重复读和幻读,但代价是性能下降,因为所有事务必须按顺序执行。
接下来,关于MySQL中`ENUM`的用法,它是一种特殊的字符串类型,用于限制列的值只能从预定义的一组值中选择。例如,创建一个名为`size`的表,其中`name`列只接受'Small'、'Medium'或'Large'这三个值:
```sql
CREATE TABLE size (name ENUM('Small', 'Medium', 'Large'));
```
然后,`CHAR`和`VARCHAR`是两种常见的字符串类型:
- `CHAR`是固定长度的,无论实际内容多长,都会填充到指定长度,如`CHAR(10)`,如果输入的字符串只有5个字符,后面会补足5个空格。检索时,尾随的空格会被自动去除。
- `VARCHAR`则是变长的,它只存储实际的字符长度,节省空间,但最大长度有限制。
字符串类型还包括`SET`(用于存储一组预定义值)、`BLOB`(用于存储大对象,如图像或文档)、`ENUM`(已讨论过)和`TEXT`(用于存储长文本)。
MySQL中的默认存储引擎通常是InnoDB,它支持事务处理、行级锁定和外键约束。而`TIMESTAMP`字段在更新时,如果带有`UPDATE CURRENT_TIMESTAMP`修饰符,当表的其他字段发生变化时,该字段会自动更新为当前时间。
主键和候选键的概念也需区分清楚:
- **主键(Primary Key)**:它是表中的一个或多个字段,唯一标识每行数据,且不允许有NULL值。每个表只能有一个主键。
- **候选键(Candidate Key)**:任何能够唯一标识表中记录的字段或字段组合都称为候选键,一个表可以有多个候选键,但只能选择其中一个作为主键。
至于MySQL数据库服务器性能分析,可以通过以下命令监控:
- `SHOW STATUS`:查看服务器状态变量,例如`Bytes_received`和`Bytes_sent`来了解网络流量,`Com_`开头的变量显示执行的SQL命令次数。
- `Handler`系列:监控存储引擎的操作,如`Handler_read_rnd_next`表示顺序读取记录。
- `SELECT`相关的统计:分析不同类型的查询执行计划。
- `Sort_*`:查看排序操作的信息。
- `SHOW SESSION STATUS LIKE 'Select%'`:显示与SELECT语句相关的状态。
- `SHOW PROFILES`:开启`profiling`以追踪查询的执行性能。
通过这些工具和命令,可以深入理解数据库的运行情况并优化性能。