MySQL 实战:表数据维护核心技能(插入 / 更新 / 删除全解析)

在上一篇数据库与数据表管理的基础上,本次实验聚焦表数据的核心维护操作 ------ 插入、更新与删除。数据维护是数据库日常使用中最频繁的场景,无论是批量录入数据、修正错误信息,还是清理无效记录,都需要熟练掌握对应的 SQL 语法。本文将通过实操案例,拆解 MySQL 数据维护的关键技巧,帮你轻松搞定数据增删改!

一、实验核心目标

  1. 掌握单条数据、多条数据的插入方法,包括完整字段插入和指定字段插入
  2. 学会灵活更新表数据,精准定位目标记录(避免批量误改)
  3. 熟练使用删除语句清理指定记录、清空表数据,理解不同删除方式的差异
  4. 结合多表场景,实现数据维护的综合应用

二、核心知识点与实操详解

(一)数据插入:INSERT 语句的 3 种实用场景

INSERT 语句是向表中添加数据的核心,支持单条插入、批量插入、指定字段插入,满足不同业务需求。

1. 环境准备:创建数据库与数据表

先搭建实验环境,创建 yygl 数据库和 emp 表(员工表)、salary 表(薪资表):

sql

复制代码
-- 创建yygl数据库并选择
CREATE DATABASE yygl;
USE yygl;

-- 创建emp表(员工信息表)
CREATE TABLE emp(
  empno char(4) NOT NULL PRIMARY KEY,  -- 员工编号,主键非空
  ename varchar(10),                   -- 员工姓名
  job varchar(10),                     -- 职位
  hiredate date,                       -- 入职日期
  deptno char(3)                       -- 部门编号
);

-- 创建salary表(薪资表)
CREATE TABLE salary(
  empno char(4) NOT NULL PRIMARY KEY,  -- 员工编号,与emp表关联,主键非空
  income float,                        -- 收入
  outcome float                        -- 支出
);
2. 插入数据的 3 种方式
(1)完整字段单条插入

指定所有字段的值,字段顺序需与表结构一致:

sql

复制代码
-- 插入emp表第一行数据(完整字段)
INSERT INTO emp VALUES('7369','SMITH','CLERK','2005-10-1','20');
(2)完整字段批量插入

用逗号分隔多条记录,一次执行插入多条数据,效率更高:

sql

复制代码
-- 批量插入emp表后三行数据
INSERT INTO emp VALUES
('7499','ALLEN','SALESMAN','2000-05-01','30'),
('7521','WARD','SALESMAN','2010-06-17','30'),
('7566','JONE','MANAGER','2000-04-23','20');
(3)指定字段插入

只插入部分必填字段,未指定的字段若允许为空则显示 NULL:

sql

复制代码
-- 仅插入empno和ename字段,其他字段留空
INSERT INTO emp(empno,ename) VALUES('7788','SCOTT');
3. 薪资表数据插入(实操示例)

sql

复制代码
-- 向salary表插入4条薪资数据
INSERT INTO salary VALUES
('7369',8000,1320),
('7499',12000,1463),
('7521',11500,1463),
('7566',13000,1566);

(二)数据更新:UPDATE 语句精准修改

UPDATE 用于修改表中已有数据,核心是通过 WHERE 子句定位目标记录,否则会误改全表数据!

1. 基础语法

sql

复制代码
UPDATE 表名 SET 字段1=值1, 字段2=值2 WHERE 条件;
2. 实操案例
(1)修改指定员工的职位和入职日期

sql

复制代码
-- 将empno为7788的SCOTT职位改为ANALYST,入职日期改为2007-02-10
UPDATE emp SET job='ANALYST',hiredate='2007-02-10' WHERE empno='7788';
(2)计算并更新薪资字段

先为 salary 表增加 sal(净收入)字段,再通过表达式计算值:

sql

复制代码
-- 为salary表增加sal字段(净收入)
ALTER TABLE salary ADD sal float;

-- 计算sal=income-outcome,并更新到每行
UPDATE salary SET sal=income-outcome;
3. 避坑提示
  • MySQL 默认开启SQL_SAFE_UPDATES=1(安全更新模式),禁止无 WHERE 条件的更新,若需批量更新可临时关闭:

    sql

    复制代码
    SET SQL_SAFE_UPDATES=0;  -- 关闭安全模式(操作后可重新开启为1)
  • WHERE 条件尽量使用主键(如 empno)或唯一字段,确保修改目标精准

(三)数据删除:DELETE 与 TRUNCATE 的区别与应用

删除数据分为 "删除指定记录""清空全表" 两种场景,对应 DELETE 和 TRUNCATE 两个命令,用法和效果差异较大。

1. 删除指定记录(DELETE)

sql

复制代码
-- 删除deptno为30的部门员工记录
DELETE FROM emp WHERE deptno='30';

-- 删除salary表中income在8000-10000(含边界)的记录
DELETE FROM salary WHERE income BETWEEN 8000 AND 10000;
2. 清空全表数据(两种方式对比)
命令 语法 特点 适用场景
DELETE DELETE FROM 表名; 逐行删除,可回滚,保留表结构和自增序列 需保留表结构,可能后续恢复数据
TRUNCATE TRUNCATE TABLE 表名; 快速清空,不可回滚,重置自增序列 彻底清空表数据,无需保留历史

实操示例

sql

复制代码
-- 清空emp表所有记录(TRUNCATE方式)
TRUNCATE TABLE emp;
3. 高级删除:删除表与数据库

数据维护完成后,可删除临时表或数据库(谨慎操作!):

sql

复制代码
-- 删除salary表
DROP TABLE salary;

-- 删除YGGL数据库
DROP DATABASE YGGL;

(四)综合实操:数据维护完整流程

结合上述知识点,完成从数据插入到最终清理的全流程:

  1. 创建数据库和表:CREATE DATABASE yygl; USE yygl; CREATE TABLE emp(...);
  2. 插入数据:单条插入、批量插入、指定字段插入
  3. 更新数据:修改指定记录、通过表达式计算更新字段
  4. 删除数据:删除指定条件记录、清空全表
  5. 清理环境:删除表和数据库

三、实验总结与避坑指南

  1. 插入数据注意事项:

    • 字段值与数据类型匹配(如 date 类型需符合 YYYY-MM-DD 格式)
    • 主键不可重复,非空字段必须赋值
    • 批量插入比单条插入效率更高,大数据量推荐使用
  2. 更新数据核心原则:

    • 永远不要省略 WHERE 子句(除非确实需要更新全表)
    • 多字段更新用逗号分隔,赋值符号用=(不是==
    • 修改前可先执行 SELECT 语句验证条件是否正确(如SELECT * FROM emp WHERE empno='7788';
  3. 删除数据关键区别:

    • DELETE 是 DML 语句,可通过事务回滚;TRUNCATE 是 DDL 语句,不可回滚
    • TRUNCATE 清空后自增字段会重置为初始值,DELETE 不会
    • DROP TABLE/DATABASE 会删除表 / 库结构,数据完全不可恢复,务必谨慎
  4. 常用技巧:

    • 插入部分字段时,明确指定字段名(可读性更强,避免表结构变更导致错误)
    • 数值范围查询用BETWEEN...AND...(如收入 8000-10000)
    • 临时关闭安全更新模式后,记得及时开启,避免误操作

数据维护是 MySQL 实战的基础,掌握 INSERT、UPDATE、DELETE 的灵活运用,能解决大部分日常数据处理需求。建议多结合实际场景练习(比如模拟员工信息录入、薪资调整、离职人员清理),加深对语法的理解和记忆。如果在操作中遇到问题,欢迎在评论区交流讨论!

相关推荐
旺仔学长 哈哈11 分钟前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB28 分钟前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记1 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌1 小时前
MongoDB 4.2——选择片键
数据库·mongodb
天天进步一点点2 小时前
QSqlQuery删除sqlite数据库执行drop数据表报错database table is locked unable to fetch row问题
数据库·oracle·sqlite
音视频工程实战2 小时前
PromptQL 新手入门与实战指南
数据库·sql·算法
清川渡水2 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地
数据库·人工智能·sql
TDengine (老段)2 小时前
TDengine Go 与 Rust 连接器 — 高性能异步访问
大数据·数据库·物联网·golang·rust·时序数据库·tdengine
东方佑3 小时前
MA-RMSNorm:打破“缩放换智能”的魔咒,大模型归一化的一次范式革命!
数据库·人工智能·计算机视觉
云和恩墨3 小时前
「云帆计划·长沙站」活动成功举办,云和恩墨与紫薇垣和湖南金悦科技分别签约并授牌,本地伙伴生态建设加速
数据库·科技