1. 数据库基础
问题:
请解释数据库(DB)、数据库管理系统(DBMS)、SQL 三者的区别。
参考答案:
- DB:存储数据的结构化仓库
- DBMS:管理数据库的软件(如 MySQL、Oracle)
- SQL:操作关系型数据库的标准化语言
2. SQL 分类
问题:
SQL 分为哪几类?分别写出对应的关键字(至少 3 个)。
参考答案:
- DDL:CREATE/DROP/ALTER
- DML:INSERT/UPDATE/DELETE
- DQL:SELECT
- DCL:GRANT/REVOKE
3. 表结构设计
问题:
设计一个员工表(emp),包含字段:编号、姓名、年龄、性别、入职日期、部门 ID。要求:
- 编号为主键且自增
- 年龄字段为无符号整数
- 部门 ID 关联部门表(dept)的主键
参考答案:
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age TINYINT UNSIGNED,
gender CHAR(1),
entrydate DATE,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES dept(id)
);
4. 数据查询
问题:
使用 DQL 查询年龄在 20-30 岁之间的女性员工,按入职日期降序排列,显示前 5 条记录。
参考答案:
SELECT * FROM emp
WHERE age BETWEEN 20 AND 30
AND gender = '女'
ORDER BY entrydate DESC
LIMIT 5;
5. 约束与索引
问题:
外键约束的作用是什么?如何实现级联删除?
参考答案:
- 作用:保证数据一致性,防止孤立记录
- 级联删除:
ALTER TABLE emp ADD CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES dept(id) ON DELETE CASCADE;
6. 事务管理
问题:
事务的四大特性(ACID)是什么?脏读和幻读的区别是什么?
参考答案:
- ACID:原子性、一致性、隔离性、持久性
- 脏读:读取到未提交的数据
- 幻读:查询时不存在的数据,插入时已存在
7. 多表查询
问题:
使用内连接查询员工姓名、部门名称和薪资等级(薪资等级表 salgrade 包含 grade、losal、hisal)。
参考答案:
SELECT e.name, d.name, s.grade
FROM emp e
JOIN dept d ON e.dept_id = d.id
JOIN salgrade s ON e.salary BETWEEN s.losal AND s.hisal;
8. 权限管理
问题:
创建一个用户dev
,允许其远程访问数据库,授予test_db
的 SELECT 和 INSERT 权限。
参考答案:
CREATE USER 'dev'@'%' IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON test_db.* TO 'dev'@'%';
9. 函数应用
问题:
如何使用 MySQL 函数实现以下需求:
- 将员工姓名转换为大写
- 计算员工入职天数
- 根据薪资等级返回 “高 / 中 / 低”
参考答案:
SELECT
UPPER(name) AS 大写姓名,
DATEDIFF(CURDATE(), entrydate) AS 入职天数,
CASE
WHEN salary > 10000 THEN '高'
WHEN salary > 5000 THEN '中'
ELSE '低'
END AS 薪资等级
FROM emp;
10. 性能优化
问题:
当查询速度变慢时,可能的优化手段有哪些?(至少列出 3 种)
参考答案:
- 添加索引(如
INDEX idx_name ON emp(name)
) - 优化查询语句(避免 SELECT *、使用 EXPLAIN 分析执行计划)
- 分表或分区(按时间或业务拆分表)
- 调整数据库配置(如缓冲池大小)