Skip to content

MySQL数据操作厨房 🧑🍳

🍳 烹饪数据的三道火 在这里你将掌握:

  • 数据三明治制作(INSERT) 🥪
  • 数据美容院(UPDATE) 💅
  • 数据消失咒(DELETE) 🧙
  • 事务安全绳(TRANSACTION) ⚡

1. 数据三明治(INSERT) 🥪

🥢 喂数据的三重姿势

sql
/* 🎒 新生入学登记 */
-- 完整配方(字段顺序要对齐!)
INSERT INTO 学生表 (学号, 姓名, 年龄)
VALUES (1001, '张三', 18);

-- 简写版(需提供所有字段值)
INSERT INTO 学生表 
VALUES (1002, '李四', 19, '计算机系');

-- 批量投喂(高效吃法)
INSERT INTO 商品表 (商品名, 价格)
VALUES 
    ('薯片', 5.5),
    ('可乐', 3.0),
    ('巧克力', 10.8);

🚨 新手翻车现场

sql
-- 错误1:字段和值数量不匹配
INSERT INTO 学生表 (学号, 姓名) VALUES (1003); ❌
-- 正确:INSERT INTO 学生表 (学号, 姓名) VALUES (1003, '王五'); ✅

-- 错误2:字符串忘加引号
INSERT INTO 学生表 VALUES (1004, 赵六, 20); ❌
-- 正确:INSERT INTO 学生表 VALUES (1004, '赵六', 20); ✅

2. 数据美容院(UPDATE) 💅

⚡ 高危操作警告 永远记得加WHERE! 除非你想给全校学生改名叫"张三"

sql
-- 单个改造:张三改名
UPDATE 学生表 
SET 姓名 = '张老三' 
WHERE 学号 = 1001;

-- 套餐美容:年龄+1 & 加星标
UPDATE 用户表 
SET 
    年龄 = 年龄 + 1,
    会员等级 = '⭐' 
WHERE 注册时间 < '2020-01-01';
sql
-- 用商品表数据更新库存
UPDATE 订单表 AS o
JOIN 商品表 AS p ON o.商品ID = p.ID
SET o.总价 = o.数量 * p.单价
WHERE o.状态 = '待付款';

3. 数据消失咒(DELETE) 🧙

🧼 安全删除三步走

  1. 先用SELECT测试WHERE条件
  2. 确认受影响行数
  3. 执行DELETE
sql
/* 🎓 毕业离校流程 */
-- 先预览要删除的数据
SELECT * FROM 学生表 
WHERE 毕业年份 = 2023;

-- 确认无误后执行删除
DELETE FROM 学生表 
WHERE 毕业年份 = 2023;

-- 清空回收站(慎用!)
TRUNCATE TABLE 临时表; -- 🚨 不可恢复!

4. 事务安全绳(TRANSACTION) ⚡

🧵 数据安全的生命线

sql
-- 开始编织安全网
START TRANSACTION;

-- 转账操作示例
UPDATE 账户表 SET 余额 = 余额 - 500 WHERE 用户ID = 1001;
UPDATE 账户表 SET 余额 = 余额 + 500 WHERE 用户ID = 1002;

-- 确认无误后提交
COMMIT;

-- 发现错误时回滚
ROLLBACK;

5. 实战厨房 👨🍳

sql
/* 🛒 电商订单管理 */
-- 新增订单
START TRANSACTION;
INSERT INTO 订单表 (订单号, 用户ID, 总金额)
VALUES ('OD202308201234', 1001, 299.00);

-- 关联商品
INSERT INTO 订单详情 (订单号, 商品ID, 数量)
VALUES 
    ('OD202308201234', 101, 1),
    ('OD202308201234', 205, 2);

COMMIT;

/* 🏫 校园信息系统 */
-- 学生转专业
UPDATE 学生表 
SET 院系 = '人工智能学院' 
WHERE 学号 IN (1005, 1008, 1012);

-- 删除退学学生
DELETE FROM 选课记录 
WHERE 学号 = 1003;

🚨 避坑指南

  1. UPDATE/DELETE必带WHERE:操作前先用SELECT测试
  2. 批量操作分批次:每次处理1万条左右
  3. TRUNCATE不可逆:比DELETE快,但无法恢复
  4. 事务是保护伞:重要操作必须用事务包裹
  5. 软删除更安全:添加is_deleted字段代替物理删除

🎁 高级技巧

sql
-- 软删除示范(数据假删除)
UPDATE 用户表 
SET is_deleted = 1 
WHERE 最后登录时间 < '2020-01-01';

-- 从查询结果直接插入
INSERT INTO 优质用户表 (用户ID, 消费总额)
SELECT 用户ID, SUM(金额) 
FROM 订单表 
GROUP BY 用户ID 
HAVING SUM(金额) > 10000;