Bootstrap

第七篇 SQL数据更新:增删改查中的「增删改」保姆级教程

今天带大家彻底搞懂SQL数据更新(增删改),保证你学完就能上手实战!文末还有避坑指南练习题

目录

    • 一、数据插入(INSERT):往数据库“加菜”
      • 1.1 基础语法:往表里塞一行数据
        • 🛑 **避坑提醒**
      • 1.2 高级玩法:批量导入数据
        • ✅ **效率对比**
    • 二、数据删除(DELETE):别手滑删库跑路!
      • 2.1 基础操作:删除指定行
      • 2.2 清空表的两种姿势
    • 三、数据更新(UPDATE):精准修改不翻车
      • 3.1 单列更新:改价格、改状态
      • 3.2 多列更新:同时改多个字段
        • 🎯 **实战技巧**
    • 四、事务(TRANSACTION):要么全成功,要么全失败
      • 4.1 银行转账案例:事务的原子性
      • 4.2 ACID特性解读(用快递比喻)
    • 五、避坑指南 & 学习资源
      • 5.1 新手常见错误
      • 5.2 推荐学习路径
    • 🎮 互动练习

一、数据插入(INSERT):往数据库“加菜”

1.1 基础语法:往表里塞一行数据

-- 语法(像点菜一样指定列名和值)
INSERT INTO 表名 (1,2, ...) VALUES (1,2, ...);

-- 示例:往「学生表」加一个学生
INSERT INTO students (id, name, age) 
VALUES (101, '张三', 20);
🛑 避坑提醒
  • 如果省略列名,必须按表结构顺序填写所有列的值(容易踩坑!)
  • 外键约束就像“菜单上的必选菜”:插入的值必须在关联表中存在

1.2 高级玩法:批量导入数据

场景:把A表的数据复制到B表(比如备份用户数据)

-- 语法(直接搬运数据)
INSERT INTO 目标表 (1,2)
SELECT 列A, 列B FROM 源表 WHERE 条件;

-- 示例:备份2023年的订单
INSERT INTO orders_backup (order_id, total_price)
SELECT id, price FROM orders 
WHERE year = 2023;
效率对比
方法1万条数据耗时适用场景
逐条INSERT10秒小数据量测试
INSERT…SELECT0.5秒大数据量迁移

二、数据删除(DELETE):别手滑删库跑路!

2.1 基础操作:删除指定行

-- 语法(带WHERE条件才是好习惯!)
DELETE FROM 表名 WHERE 条件;

-- 示例:删除年龄超过30岁的用户(谨慎操作!)
DELETE FROM users WHERE age > 30;

2.2 清空表的两种姿势

方法特点恢复可能性
DELETE FROM 表逐行删除,可回滚✅ 事务未提交可恢复
TRUNCATE TABLE 表直接清空,速度极快❌ 不可恢复

三、数据更新(UPDATE):精准修改不翻车

3.1 单列更新:改价格、改状态

-- 语法(一定要加WHERE!)
UPDATE 表名 SET=新值 WHERE 条件;

-- 示例:所有「电子产品」涨价10%
UPDATE products 
SET price = price * 1.1 
WHERE category = '电子产品';

3.2 多列更新:同时改多个字段

-- 方法1:逗号分隔(通用写法)
UPDATE employees 
SET salary = salary * 1.05, 
    level = '高级'
WHERE performance > 90;

-- 方法2:列清单(部分数据库支持)
UPDATE employees 
SET (salary, level) = (salary*1.05, '高级') 
WHERE performance > 90;
🎯 实战技巧

用子查询实现复杂更新:

-- 给「技术部」员工加薪
UPDATE employees 
SET salary = salary + 1000
WHERE dept_id IN (
    SELECT id FROM departments 
    WHERE name = '技术部'
);

四、事务(TRANSACTION):要么全成功,要么全失败

4.1 银行转账案例:事务的原子性

BEGIN TRANSACTION;  -- 开始事务

UPDATE accounts SET balance = balance - 100 
WHERE user = 'A';  -- A账户扣款

UPDATE accounts SET balance = balance + 100 
WHERE user = 'B';  -- B账户收款

COMMIT;  -- 提交事务(只有这里才真正生效)
-- 如果出错就执行 ROLLBACK; 回滚

4.2 ACID特性解读(用快递比喻)

特性解释生活案例
原子性全部成功或全部失败网购付款:扣款和发货必须同时成功
一致性数据符合业务规则快递包裹必须符合运输标准
隔离性多个事务互不干扰多个快递员同时处理不同订单
持久性提交后永久保存签收后快递状态不可更改

五、避坑指南 & 学习资源

5.1 新手常见错误

  1. 忘记WHERE条件UPDATEDELETE不带WHERE会操作全部数据
  2. 插入NULL到非空列:像往必填表单里留空,会报错!
  3. 事务未提交:执行完记得COMMIT,否则修改可能丢失

5.2 推荐学习路径

  1. 入门:《SQL必知必会》
  2. 在线练习SQLZoo
  3. 进阶:《高性能MySQL》第6章

🎮 互动练习

场景:超市商品管理表 products

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    category VARCHAR(50),
    price DECIMAL(10,2),
    stock INT
);

任务

  1. 插入一条新商品:手机,价格2999,库存100
  2. 将所有「食品」类商品降价20%
  3. 删除库存为0的商品

(答案在评论区置顶,动手试试吧!)


下期预告:《复杂查询》
互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟