MySQL实战进阶:一个计算机系学生的技术札记

引言:那些让我通过大厂面试的MySQL秘籍

在参与校园OJ系统开发时,我真正理解了MySQL不仅是存储工具,更是业务逻辑的实现载体。本文将揭秘课程设计中不会深入,但企业面试必问的四大核心技能。

一、子查询:SQL中的瑞士军刀

1.1 多层嵌套查询实战

开发选课系统时,需要找出选了"数据结构"但没选"算法分析"的学生:

SELECT student_id 
FROM course_selection
WHERE course_id = (
    SELECT id FROM courses WHERE name='数据结构'
) AND student_id NOT IN (
    SELECT student_id FROM course_selection 
    WHERE course_id = (
        SELECT id FROM courses WHERE name='算法分析'
    )
);

性能对比:该写法比多次查询+程序处理快3-5倍

1.2 EXISTS的魔法

检查院系是否有学生获奖的优化方案:

SELECT dept_name 
FROM departments d
WHERE EXISTS (
    SELECT 1 FROM students s
    WHERE s.dept_id=d.id AND s.awards>0
);

二、连接查询:数据关系的三维地图

2.1 左连接的特殊应用

统计每个学生的缺勤次数(含零次记录):

SELECT s.name, COUNT(a.id) AS absence_count
FROM students s LEFT JOIN absences a
ON s.id=a.student_id
GROUP BY s.id;

2.2 全连接的隐藏价值

员工-部门关系分析(显示所有关联和游离记录):

SELECT e.emp_name, d.dept_name
FROM employees e FULL JOIN departments d
ON e.dept_id=d.id;

三、键约束:数据世界的交通法规

3.1 主键设计的艺术

CREATE TABLE book_loans (
    loan_id INT AUTO_INCREMENT,
    book_id INT NOT NULL,
    user_id INT NOT NULL,
    loan_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (loan_id),
    UNIQUE KEY (book_id, user_id, loan_date)
);

3.2 外键的级联策略矩阵

策略删除父表记录更新父表键值CASCADE同步删除同步更新SET NULL子表置NULL子表置NULLRESTRICT拒绝操作拒绝操作

四、数据操作:CRUD的进阶技法

4.1 批量插入的三种姿势

/* 方式1:标准多值插入 */
INSERT INTO logs VALUES (NULL,'login'),(NULL,'logout');

/* 方式2:查询结果插入 */
INSERT INTO archive_logs 
SELECT * FROM current_logs WHERE create_date<'2025-01-01';

/* 方式3:LOAD DATA导入 */
LOAD DATA INFILE '/tmp/data.csv' INTO TABLE temp_data;

4.2 删除操作的防御编程

START TRANSACTION;
-- 先创建备份
CREATE TABLE deleted_users_backup AS
SELECT * FROM users WHERE status='inactive';

-- 再执行删除
DELETE FROM users WHERE status='inactive';
COMMIT;

结语:给学弟学妹的成长建议

使用MySQL Workbench可视化执行计划

定期练习LeetCode数据库题库

建立自己的SQL代码片段库

阅读《高性能MySQL》第5章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值