SQL-增删改操作

🚀 SQL 入门系列:如何优雅地插入数据?从单条到批量的全场景解析

引言

在关系型数据库的日常操作中,数据插入是最基础的操作之一。无论是初始化数据,还是通过业务逻辑新增记录,INSERT 语句都是我们的「数据入口」。本文将结合廖雪峰 SQL 教程中的核心知识点,详细解析INSERT语句的使用场景、语法规则及常见问题,帮助开发者快速掌握数据插入的核心技巧。

一、单条数据插入:基础语法与实战

1. 核心语法结构

INSERT语句的标准格式如下:

INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
  • 字段列表:指定要插入数据的列名,顺序可自定义
  • 值列表:与字段列表一一对应,数据类型需匹配

2. 实战案例:插入单条记录

students表为例,插入一条学生记录:

-- 插入单条记录(省略自增主键id)
INSERT INTO students (class_id, name, gender, score) 
VALUES (2, '大牛', 'M', 80);

-- 执行结果查询
SELECT * FROM students;

执行后结果集中新增一行记录,id字段由数据库自动生成(自增主键特性)。

3. 字段顺序的灵活性

字段顺序不必与表定义一致,但值的顺序必须严格匹配:

-- 调整字段顺序插入
INSERT INTO students (score, gender, name, class_id) 
VALUES (80, 'M', '大牛', 2);

此写法与标准写法效果完全一致,提升了语句编写的灵活性。

二、批量插入:提升数据写入效率

当需要插入多条记录时,可通过一次INSERT语句完成批量操作:

-- 一次性插入3条记录
INSERT INTO students (class_id, name, gender, score) 
VALUES
  (1, '大宝', 'M', 87),
  (2, '二宝', 'M', 81),
  (3, '三宝', 'M', 83);
  • 效率优势:减少数据库交互次数,提升写入性能
  • 执行结果:返回值为本次插入的记录数(示例中返回3

三、关键细节:自增主键与默认值处理

1. 自增主键的省略规则

  • 场景:当表定义中包含自增主键(如AUTO_INCREMENT)时
  • 规则:插入语句中无需包含主键字段,数据库自动生成唯一值
  • 注意:主键字段必须设置为自增属性,否则会导致插入失败

2. 默认值字段的处理

若字段设置了默认值(如CREATE TABLE时指定DEFAULT 'unknown'),插入时可省略该字段:

-- 省略具有默认值的gender字段
INSERT INTO students (class_id, name, score) 
VALUES (2, '匿名', 75);

此时gender字段会自动填充为表定义的默认值。

SQL 更新数据实战指南:从基础到进阶操作详解

一、引言

在关系型数据库操作中,数据更新是最常用的操作之一。通过 UPDATE 语句,我们可以灵活地修改表中已有记录的字段值。本文将结合实战案例,详细解析 UPDATE 语句的核心用法及注意事项,帮助你避免生产环境中的常见风险。

二、UPDATE 语句基本语法

UPDATE 语句的核心结构由三部分组成:目标表更新字段与值筛选条件(可选)。基本语法如下:

UPDATE <表名> 
SET 字段1=1, 字段2=2, ... 
[WHERE 条件表达式]; -- 方括号表示可选
  • 关键点SET 子句指定需要修改的字段和值,WHERE 子句用于筛选目标记录。若省略 WHERE,将更新表中所有记录!

三、实战场景与案例

3.1 单条记录更新

需求:将 students 表中 id=1 的学生姓名改为 “大牛”,成绩改为 66 分。

-- 更新单条记录
UPDATE students 
SET name='大牛', score=66 
WHERE id=1;

-- 验证结果
SELECT * FROM students WHERE id=1;

执行结果

id,class_id,name,gender,score
1,1,大牛,M,66

3.2 批量条件更新

需求:将 id 为 5-7 的学生姓名统一改为 “小牛”,成绩设为 77 分。

UPDATE students 
SET name='小牛', score=77 
WHERE id BETWEEN 5 AND 7; -- 等价于 id>=5 AND id<=7

执行结果:影响 3 条记录(id=5,6,7)。

3.3 使用表达式更新

需求:给所有成绩低于 80 分的学生加 10 分。

UPDATE students 
SET score = score + 10 -- 直接使用字段表达式
WHERE score < 80;

执行逻辑:对每条符合条件的记录,取当前 score 值加 10 后更新回字段。

3.4 无匹配条件的更新

场景:当 WHERE 条件无匹配记录时,UPDATE 不会报错,但也不会执行任何修改。

UPDATE students 
SET score=100 
WHERE id=999; -- 假设表中无此ID

执行结果:影响 0 条记录,表数据不变。

四、MySQL 执行细节

在 MySQL 中执行 UPDATE 时,除了返回影响的行数,还会显示匹配行数和变更行数:

mysql> UPDATE students SET name='大宝' WHERE id=1;
Query OK, 1 row affected (0.00 sec) -- 影响行数
Rows matched: 1  Changed: 1  Warnings: 0 -- 匹配行数与实际变更行数
  • 匹配行数(Rows matched) :满足 WHERE 条件的记录数。
  • 变更行数(Changed) :实际发生字段值变化的记录数(可能因新值与旧值相同而小于匹配行数)。

【SQL 必知】DELETE 语句深度解析:从基础用法到生产安全实践

date: 2025-06-22
tags: SQL 优化,数据库操作,数据安全,开发实战
categories: 后端技术
author: 豆包


引言

在关系型数据库操作中,DELETE语句是数据清理的核心工具,但也是最容易引发「生产事故」的高危操作。本文结合廖雪峰 SQL 教程内容,通过语法解析、实战案例和安全规范,带你全面掌握DELETE的正确使用姿势,避免「删库跑路」风险。

一、DELETE 基础:单条数据删除的核心逻辑

语法结构与执行原理

DELETE FROM table_name WHERE condition;
  • 关键参数

    • FROM:指定目标表
    • WHERE:筛选条件(决定删除范围,必须谨慎编写
  • 执行逻辑:逐行匹配条件,删除所有符合条件的记录

单条删除示例

场景:删除students表中id=1的记录

-- 执行删除
DELETE FROM students WHERE id = 1;

-- 验证结果(记录已移除)
SELECT * FROM students;

二、批量删除进阶:多条件组合与高效操作

1. 范围删除(BETWEEN/AND)

场景:删除id在 5-7 区间的记录

DELETE FROM students WHERE id BETWEEN 5 AND 7;
-- 等价于
DELETE FROM students WHERE id >= 5 AND id <= 7;

2. 枚举值删除(IN 操作符)

场景:删除id为 3、4、8 的不连续记录

DELETE FROM students WHERE id IN (3, 4, 8);

执行特性

  • 批量处理:一次操作可删除多条记录
  • 安全验证:执行前先用SELECT语句校验WHERE条件结果集

三、致命操作:不带 WHERE 的全表删除风险

DELETE FROM students; -- 危险!!!
  • 后果:清空表中所有数据,且无撤销机制(依赖事务或备份)

  • 防护策略

    1. 生产环境禁用无过滤条件的DELETE

    2. 使用事务包裹操作:

      BEGIN TRANSACTION; -- 开启事务
      DELETE FROM students WHERE id = 999;
      ROLLBACK; -- 误删时回滚(未提交前)