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

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

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 相关产品和应用

全部下载

专题列表