游乐游手机版
首页/数据库/文章详情

SQL增删改操作详解 数据插入更新与删除实战指南

时间:2026-05-10 12:26
SQL中插入数据可使用INSERT语句,包括逐条插入、指定字段插入及批量插入。更新数据通过UPDATE语句结合WHERE条件精准修改记录。删除操作使用DELETE语句,同样依赖WHERE条件。增删改操作默认自动提交,可手动关闭。计算列能自动根据其他字段计算生成值,简化数据维护。操作时需注意字段长度匹配及数据库约束,避免失败。

SQL数据插入操作详解

为数据库表添加新记录是数据管理中最核心的基础操作。本文将系统讲解SQL INSERT语句的多种实用方法,帮助您高效完成数据录入工作。

SQL数据处理之增删改实现方式

最基础的插入方式是逐条添加数据,具体可分为以下几种常用形式:

# ① 按表结构顺序全字段插入(需谨慎)
INSERT INTO emp1
VALUES (1,'Tom','2000-12-21',3400);
# 注意:此方法必须严格遵循表字段的声明顺序,不能有任何错位。
# 以下是典型错误示例,字段顺序混乱导致数据类型不匹配:
INSERT INTO emp1
VALUES (2,3400,'2000-12-21','Jerry');

# ② 指定字段插入(推荐做法)
INSERT INTO emp1(id, hire_date, salary, `name`)
VALUES(2, '1999-09-09', 4000, 'Jerry');
# 优势在于语义清晰,未指定字段将自动设为NULL值。
# 例如仅填充部分字段,hire_date将保持为空:
INSERT INTO emp1(id, salary, `name`)
VALUES(3, 4500, 'shk');

# ③ 批量插入多条记录(高效推荐)
INSERT INTO emp1(id, NAME, salary)
VALUES
(4, 'Jim', 5000),
(5, '张俊杰', 5500);

除了手动输入数据,更高效的方式是将查询结果直接导入目标表,实现数据迁移或复制。

INSERT INTO emp1(id, NAME, salary, hire_date)
# 直接衔接SELECT查询语句
SELECT employee_id, last_name, salary, hire_date
FROM employees
WHERE department_id IN (70, 60);

使用查询插入时需重点关注两个技术要点:

  • 目标表(emp1)中接收数据的字段,其定义的长度必须大于或等于源表(employees)对应字段的长度。
  • 若目标字段长度不足,插入操作可能失败或发生数据截断,导致信息丢失或报错。

SQL数据更新操作指南

数据入库后常需维护更新,UPDATE语句在此场景中至关重要。其标准语法为UPDATE … SET … WHERE …,WHERE子句能实现精准的批量修改,避免全表更新。

-- 将编号为5的员工入职日期更新为当前日期
UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;

-- 单条记录多字段同时更新
UPDATE emp1
SET hire_date = CURDATE(), salary = 6000
WHERE id = 4;

-- 实战案例:为姓名中包含字母‘a’的员工统一加薪20%
UPDATE emp1
SET salary = salary * 1.2
WHERE NAME LIKE '%a%';

需注意,更新操作可能因数据库约束而失败。常见约束包括外键约束、唯一性约束等,它们保障了数据的完整性与业务规则。

-- 若department_id=10000的部门不存在且设有外键约束,此更新将失败
UPDATE employees
SET department_id = 10000
WHERE employee_id = 102;

SQL数据删除操作解析

清理无效或过期数据需使用DELETE操作。其语法为DELETE FROM … WHERE …,WHERE条件决定了删除范围,务必谨慎使用。

-- 删除id为1的特定记录
DELETE FROM emp1
WHERE id = 1;

-- 删除操作同样受数据完整性约束限制
-- 例如,若编号50的部门下仍有员工,外键约束将阻止删除
DELETE FROM departments
WHERE department_id = 50;

关于增删改(DML)操作,需了解其事务特性:默认情况下,每条DML语句执行后会自动提交(autocommit模式)。如需执行多个关联操作后统一提交或回滚,可先关闭自动提交:SET autocommit = FALSE

数据库进阶特性:计算列应用

现代数据库系统提供了计算列功能,该列的值会自动根据同一行其他列的值计算生成,无需手动维护,极大提升了数据一致性与操作效率。

CREATE TABLE test1(
    a INT,
    b INT,
    c INT GENERATED ALWAYS AS (a + b) VIRTUAL  -- 定义计算列c,其值恒等于a+b
);

-- 插入数据时只需提供a和b,c会自动计算填充
INSERT INTO test1(a, b)
VALUES(10, 20);

SELECT * FROM test1; -- 查询结果将显示c的值为30

-- 更新a列数值,c列会自动同步重新计算
UPDATE test1
SET a = 100;
-- 此时c的值将自动更新为120 (100+20)

核心要点总结

熟练掌握数据的插入、更新与删除是数据库操作的基本功。从单条插入到批量导入,从直接赋值到利用计算列自动生成,灵活运用这些技巧能让数据管理工作效率倍增。特别提醒,在对有约束的表执行更新和删除前,务必评估操作对数据完整性的影响,确保符合业务规则。

来源:https://www.jb51.net/database/363556jo3.htm
上一篇PostgreSQL存储过程异步任务实现指南ListenNotify机制详解 下一篇SQL查询重复数据教程 使用GROUP BY和HAVING子句
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
如何在PostgreSQL 16中创建带安全限定符的SQL视图详细教程
数据库 · 2026-06-27

如何在PostgreSQL 16中创建带安全限定符的SQL视图详细教程

先说几个核心判断:PostgreSQL 16 的安全视图,不是靠某个内置参数或语法开关就能一劳永逸解决的。它需要一套组合拳来保障——权限、schema 隔离、行级策略,少一个都不行。 PostgreSQL 16 安全视图的“三重卡死”机制 PostgreSQL 16 本身并不支持带参数的视图。

SQL视图定义中为何不建议使用SELECT * 而应明确列名
数据库 · 2026-06-27

SQL视图定义中为何不建议使用SELECT * 而应明确列名

从语法层面来看,在SQL视图定义中使用SELECT *本身并不构成语法错误。然而,从数据库设计与架构优化的角度审视,这种做法几乎等同于主动放弃了对于输出结果集的精确掌控——视图一旦创建,其列名、列顺序以及列数量理应是明确且固定的,而*通配符却让这一切变成了运行时才揭晓的未知数。视图列结构会因底层表变

SQL Server GROUP BY非聚合列报错解决方法
数据库 · 2026-06-27

SQL Server GROUP BY非聚合列报错解决方法

SQL Server 对查询的模糊性零容忍,态度极为明确。一旦 SELECT 列表中包含非聚合列且该列未被 GROUP BY 子句引用,SQL Server 便会立即抛出“列名无效”错误,绝不妥协、猜测或回退。这种严格虽然让新手感到棘手,但也迫使开发者正视查询语义的边界。 然而,许多开发者在遭遇此错

利用SQL嵌套查询检查日期区间重叠有效性
数据库 · 2026-06-27

利用SQL嵌套查询检查日期区间重叠有效性

好的,我将以一位资深数据库专家的视角,对原文进行人性化重写,保留所有核心信息、逻辑结构与图片,同时去除AI腔调,让语言更自然、有节奏,并谨慎控制第一人称的使用。 --- 日期区间重叠检查,这事儿的坑比想象的多。写 SQL 时,很多人总想着先写个函数或者建个临时表来比对,其实没必要——直接上自连接加个

Oracle 12c RAC环境下RMAN恢复共享数据文件
数据库 · 2026-06-27

Oracle 12c RAC环境下RMAN恢复共享数据文件

在RAC环境下使用RMAN恢复共享数据文件,很多DBA第一次遇到时都会感到棘手:备份文件明明完整,执行RESTORE DATABASE却报ORA-01102或ORA-01507。别紧张,这并非命令错误,而是RAC的共享存储与多实例并发机制与RMAN恢复流程存在根本性的不兼容。 RMAN在RAC下无法