从零到精通:MySQL 开发实战全攻略

🚀 从零到精通:MySQL 开发实战全攻略

作者:你的昵称
标签:MySQL | SQL 基础 | 数据库实战 | CRUD | 数据约束
发布时间:2025-05-18


欢迎来到 MySQL 世界!如果你正在为“如何快速上手数据库操作”而发愁,或者想在项目中游刃有余地玩转 CRUD、约束和多表联动,那么这篇文章绝对不容错过。让我们带着好奇心,动手实战,一步步攻克 MySQL 的“五大关卡”吧!🎯


📚 目录

  1. 准备篇:创建 & 切换数据库
  2. 建表篇:认识常用字段类型
  3. 插入篇:一条、批量、子查询插入技巧
  4. 更新篇:如何优雅地改数据
  5. 删除篇:DELETE vs TRUNCATE
  6. 约束篇:让数据乖乖“听话”
  7. 实战篇:多表联动 & 练习题
  8. 总结 & 拓展阅读

准备篇:创建 & 切换数据库

-- 1️⃣ 新建一个数据库
CREATE DATABASE dbtest3;

-- 2️⃣ 切换到刚创建的数据库
USE dbtest3;

Tip:给不同项目分库管理,能让测试与生产环境“互不干扰”。

🧱 建表篇:认识常用字段类型

CREATE TABLE IF NOT EXISTS emp1 (
  id        INT,
  `name`    VARCHAR(15),
  hire_date DATE,
  salary    DOUBLE(10,2)
);
字段名称类型说明
idINT整型,自然主键或索引列
nameVARCHAR(15)员工姓名,最长 15 个字符
hire_dateDATE入职日期
salaryDOUBLE(10,2)工资,保留两位小数

🎯 小彩蛋IF NOT EXISTS 能有效避免重复建表报错,是开发中的“小护身符”!

🚀 插入篇:一条、批量、子查询插入技巧

1️⃣ 单条插入(全字段 / 指定字段)

-- 全字段插入
INSERT INTO emp1 VALUES (1, 'eric', '2024-07-28', 3400);

-- 指定字段插入(其他字段自动为 NULL)
INSERT INTO emp1 (id, `name`) VALUES (3, 'miller');

💡 小贴士 :指定字段插入时,未写出的字段会默认填入 NULL,务必确保字段允许为空。

2️⃣ 批量插入

INSERT INTO emp1 VALUES
  (4, 'oscar', '2024-01-12', 5500),
  (5, 'lily', '2024-05-14', 3400),
  (6, 'lucy', '2024-04-18', 2300);

📌 优点: 一次插入多条记录,性能更佳,代码更整洁,适合初始化导入数据。

3️⃣ 子查询一键导入

INSERT INTO emp1 (id, `name`, hire_date, salary)
SELECT employee_id, last_name, hire_date, salary
FROM dbtest2.employees
WHERE department_id IN (60, 70);

🎯 妙用: 跨库拉数据、复用已有查询逻辑,一键导入超高效,既省力又规范!

🧠 总结:

插入方式场景优点
单条插入测试或手动补录个别数据简单直观
批量插入初始化或快速导入小批量数据语句短、效率高
子查询插入跨库迁移、逻辑复用结合查询逻辑,自动插入数据

🛠️ 更新篇:如何优雅地改数据

在实际开发中,更新数据不仅仅是简单的 UPDATE,学会精准控制和批量修改,才能提升操作的优雅度与效率。


✅ 全部更新:一键重置所有入职日期

UPDATE emp1 SET hire_date = CURDATE();

📌说明: 将所有员工的入职日期统一设置为当前日期。

🎯 条件更新:精准打击某位员工

UPDATE emp1
SET salary = salary * 1.2
WHERE `name` LIKE '%a%';

📌 说明: 只更新姓名中包含字母a的员工,工资上浮 20%。

🔧 多字段更新:一条语句搞定多个改动

UPDATE emp1
SET hire_date = '2024-07-13', salary = 1900
WHERE id = 3;

📌 说明: 同时更新入职日期与工资,锁定 id = 3 的员工。

🗑️ 删除篇:DELETE vs TRUNCATE

🔹 DELETE:可加条件,逐条删除,慢但可回滚

DELETE FROM emp1 WHERE id = 3;

🔹 TRUNCATE:一键清空表,快速但无法回滚

TRUNCATE TABLE emp1;

⚠️ 警告: 使用 TRUNCATE 前请三思,数据直接飞走不找回!

🔐 约束篇:让数据乖乖“听话”

在数据库设计中,约束(Constraint)就像“规矩”,可以让数据更规范、更安全。我们来认识几个最常用的字段约束👇


1️⃣ NOT NULL(非空约束)

确保字段不能为空,不允许插入 NULL 值。

CREATE TABLE test_not_null (
  id        INT NOT NULL,
  last_name VARCHAR(15) NOT NULL,
  email     VARCHAR(25)
);

2️⃣ UNIQUE(唯一约束)

保证某一列或组合列的值在表中唯一,避免“撞车”。

CREATE TABLE test_unique (
  id     INT UNIQUE,
  email  VARCHAR(25) UNIQUE,
  salary DECIMAL(10,2),
  CONSTRAINT uk_name UNIQUE (last_name)
);

3️⃣ PRIMARY KEY(主键约束)

表中每条记录的“身份证”,唯一且非空。常用于 id 字段,保障数据的唯一性与可识别性。

CREATE TABLE test_pk (
  id   INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20)
);

4️⃣ FOREIGN KEY(外键约束)

用于建立表与表之间的关联关系,让数据结构更具“家族谱系”。

📌 场景示例:员工 emp 属于某个部门 dept


🔹 主表:部门表

CREATE TABLE dept (
  dept_id INT PRIMARY KEY,
  dname   VARCHAR(50)
);

🔹 从表:员工表(引用主表)

CREATE TABLE emp (
  emp_id        INT PRIMARY KEY AUTO_INCREMENT,
  emp_name      VARCHAR(15),
  department_id INT,
  CONSTRAINT fk_dept FOREIGN KEY (department_id)
    REFERENCES dept(dept_id)
    ON DELETE SET NULL
    ON UPDATE CASCADE
);

🎯 说明:

  • FOREIGN KEY (department_id):指定 emp 表中的 department_id 字段为外键。
  • REFERENCES dept(dept_id):引用 dept 表中的 dept_id 字段。
  • ON DELETE SET NULL:如果部门被删除,相关员工的 department_id 将被置为 NULL,防止数据孤岛。
  • ON UPDATE CASCADE:如果部门编号更新,员工表中对应的值也将自动更新,保持同步。

🧠 小贴士:

  • 外键确保了数据之间的完整性,避免“部门不存在但员工已归属”这类问题。
  • 设置外键约束后,插入或更新时必须确保关联记录存在,否则会报错。

🚀 实战篇:多表联动 & 练习题


🏆 多表删除一条龙

DELETE m, u
FROM my_employees m
JOIN users u
  ON m.userid = u.userid
WHERE m.userid = 'Bbiri';

📝 综合练习

🔍 查询工资在 1200–1300 之间的员工

SELECT * FROM employee WHERE salary BETWEEN 1200 AND 1300;

📝 综合练习(更多操作示例)

🔍 查询姓“刘”的员工

SELECT id, NAME, addr FROM employee WHERE NAME LIKE '刘%';

🔧 修改“李四”的地址为“广东韶关”

UPDATE employee SET addr = '广东韶关' WHERE NAME = '李四';

💪 动手试一试,看看能否一次性搞定多个需求!


🧠 总结 & 拓展阅读

✅ 掌握五大 CRUD 技能:

  • 建库(CREATE DATABASE)
  • 建表(CREATE TABLE)
  • 增(INSERT)
  • 删(DELETE / TRUNCATE)
  • 改(UPDATE)
  • 查(SELECT)
  • 加约束(PRIMARY KEY、FOREIGN KEY、UNIQUE 等)

💡 实用小贴士:

  • ✅ 多用事务控制(BEGIN / COMMIT / ROLLBACK)提升数据安全性
  • ⚠️ 避免盲目使用 TRUNCATE,它无法回滚,操作需谨慎

📈 进阶方向推荐:

  • 🔍 索引与性能调优
  • 🔀 复杂 JOIN 与分区表操作
  • 🔒 事务隔离级别与死锁处理

🎉 恭喜你,已经掌握了 MySQL 日常开发的核心要点!

如果觉得这篇内容对你有帮助,不要忘了:

👍 点赞  ⭐ 收藏  💬 评论  📌 关注!

👉 下次我们一起聊聊 索引优化高并发事务处理,不见不散!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值