MySQL DML详解:INSERT、UPDATE、DELETE与TRUNCATE实战
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数据操纵语言的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









