今天带大家彻底搞懂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万条数据耗时 | 适用场景 |
---|---|---|
逐条INSERT | 10秒 | 小数据量测试 |
INSERT…SELECT | 0.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 新手常见错误
- 忘记WHERE条件:
UPDATE
或DELETE
不带WHERE会操作全部数据! - 插入NULL到非空列:像往必填表单里留空,会报错!
- 事务未提交:执行完记得
COMMIT
,否则修改可能丢失
5.2 推荐学习路径
- 入门:《SQL必知必会》
- 在线练习:SQLZoo
- 进阶:《高性能MySQL》第6章
🎮 互动练习
场景:超市商品管理表 products
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
category VARCHAR(50),
price DECIMAL(10,2),
stock INT
);
任务:
- 插入一条新商品:手机,价格2999,库存100
- 将所有「食品」类商品降价20%
- 删除库存为0的商品
(答案在评论区置顶,动手试试吧!)
下期预告:《复杂查询》
互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟