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) 🧙
🧼 安全删除三步走
- 先用SELECT测试WHERE条件
- 确认受影响行数
- 执行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;🚨 避坑指南
- UPDATE/DELETE必带WHERE:操作前先用SELECT测试
- 批量操作分批次:每次处理1万条左右
- TRUNCATE不可逆:比DELETE快,但无法恢复
- 事务是保护伞:重要操作必须用事务包裹
- 软删除更安全:添加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;