MySQL DML详解:INSERT、UPDATE、DELETE与TRUNCATE实战

今天早睡
今天早睡
发布时间:2026-10-16| 3人浏览过
原创

MySQL中的数据操纵语言(DML)是日常开发中处理数据的核心,主要包括增加、删除和修改操作。本文将通过具体示例演示`INSERT`的多场景用法、`UPDATE`与`DELETE`的条件筛选要点,以及`TRUNCATE`与`DELETE`在清空表时的本质区别,助力提升数据库操作效率与安全性。

1. 创建基础测试环境

在进行后续操作前,建议先准备一个测试数据库和表。以下SQL代码创建一个名为 stu 的数据库及包含基本字段的学生表 student:

# 创建数据库
create database if not exists stu;
# 使用数据库
use stu;
# 创建一个表
create table student(
    sid int primary key auto_increment,
    sname varchar(20) not null,
    sex varchar(10)
)charset=utf8;

2. 增添数据 (INSERT)

`INSERT` 语句用于向表中插入新记录。根据实际需求,可分为以下几种常见情况:

第1步:全字段或部分字段插入单条数据

当插入所有字段值时,可省略字段名列表;若只插入部分字段,必须显式指定列名。

-- 方式一:指定所有字段
insert into student(sid,sname,sex) values (1,"张三","男");
-- 方式二:省略字段名(需按顺序提供所有值)
insert into student values (2,"李莉","女");

-- 仅插入部分字段
insert into student(sname) values ("王五");
insert into student(sname,sex) values ("赵六","男");

第2步:批量插入多条数据

为了提高效率,可以一次性插入多行记录,只需在 VALUES 后提供多个元组即可:

insert into student(sname,sex) values 
("刘备","男"),("貂蝉","女"),("诸葛亮","男");

执行结果可查看当前表状态:

3. 复制已有表生成新表

在某些场景下(如备份或初始化),需要复制现有表。MySQL提供了两种常见的复制方式:

第1步:复制结构与数据

使用 SELECT * FROM 配合 CREATE TABLE,生成的新表将包含原表的所有数据:

create table student1 select * from student;

操作结果:

第2步:仅复制表结构(空表)

若只需保留表结构而不需数据,可在查询条件中加入永远为假的约束(如 WHERE 0):

create table student2 select * from student where 0;

操作结果:

第3步:向空结构中迁移数据

若后续需要将数据填入刚才创建的 student2,可使用 INSERT INTO ... SELECT 语法:

insert into student2 select * from student;

操作结果:

4. 修改数据 (UPDATE)

使用 UPDATE 修改现有记录时,务必搭配 WHERE 条件,否则将意外更新整张表所有数据。

-- 语法:update 表名 set 列1=值1 [, 列2=值2] where 条件;

-- 示例1:修改特定学生的姓名
update student set sname="王八" where sid = 3;

-- 示例2:同时修改多个字段
update student set sname="孔明",sex="猛男" where sid=7;

操作结果:

5. 删除数据 (DELETE)

DELETE 属于物理删除,数据一旦移除无法直接找回(除非有事务回滚)。同样必须谨慎使用 WHERE 子句锁定目标行。

-- 语法:delete from 表名 where 条件;

-- 示例:删除姓名为“张三”的记录
delete from student where sname="张三";

操作结果:

6. TRUNCATE 与 DELETE 的区别

虽然两者都能清除表中的数据,但在性能、日志记录及自增ID重置方面有显著差异。首先查看操作前的原始数据状态作为参考:

1) DELETE 的操作逻辑

DELETE 逐行删除记录,并将每一行的删除动作写入事务日志(Binlog/Redo Log),因此支持 ROLLBACK 回滚,但速度相对较慢。

2) TRUNCATE 的操作逻辑

TRUNCATE TABLE 直接释放数据页并重置表定义。它不逐行删除,因此日志开销极小,效率远高于 DELETE。

3) 核心区别总结

  • 数据结构影响:两者均不改变表的结构定义,仅清空数据。
  • 资源释放:DELETE 不释放占用空间;TRUNCATE 会释放空间,并重置主键自增值(通常从1开始)。
  • 事务与安全:DELETE 记录详细日志,支持事务回滚;TRUNCATE 隐式提交,不可恢复。
  • 执行效率:TRUNCATE 为一次性操作,性能优于逐行处理的 DELETE。

以上就是MySQL教程DML数据操纵语言示例详解的详细内容,更多关于DML数据操纵语言的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。