当前位置: 首页 > news >正文

MySQL 面试题

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 种)

参考答案

  1. 添加索引(如INDEX idx_name ON emp(name)
  2. 优化查询语句(避免 SELECT *、使用 EXPLAIN 分析执行计划)
  3. 分表或分区(按时间或业务拆分表)
  4. 调整数据库配置(如缓冲池大小)

相关文章:

  • Linux 系统性能调优
  • 【leetcode hot 100 994】腐烂的橘子
  • MongoDB 更新集合名
  • UML(统一建模语言)中总共有哪些图
  • VLLM专题(三十六)—自动前缀缓存
  • 当Anaconda的安装路径与我想创建的conda虚拟环境路径不一致时,应该怎么操作?
  • STM32-汇编
  • 【漫话机器学习系列】143.轮廓系数(Silhouette Coefficient)
  • QT 磁盘文件 教程03-创建、删除、复制文件
  • numpy学习笔记2:ones = np.ones((2, 4)) 的详解
  • PostgreSQL中array_to_string函数来将数组转换成逗号分隔的字符串
  • C#:深入理解Thread.Sleep与Task.Delay
  • 类和对象C++
  • 鸿蒙数据持久化之首选项
  • WebGL学习2
  • Echarts 折线图
  • 【Linux笔记】动态库与静态库的理解与加载
  • 《数字图像处理》第三章 灰度变换与空间滤波学习笔记(3.1-3.2)反转、对数、幂律、分段线性等变换
  • 【QT:QSS】
  • 在 MySQL 中,只写 JOIN 等价于?
  • 个人网站如何加入百度联盟/百度营稍
  • 网站广告位制作/扬州seo优化
  • 贸易公司做网站怎么样/b站视频推广网站2023
  • 设计网站名称/谷歌seo和百度seo区别
  • 如何快速做单页面网站/可以直接打开网站的网页
  • 服务器搭建网站能ping t/西安百度网站排名优化