MySQL之数据操纵语言(DML)
数据操纵语言(DML)
数据操纵语(Data Manipulation Language),简称DML。
DML主要有如下几个常用功能。
增 | 删 | 改 |
---|---|---|
insert | delete | update |
# 创建数据库 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;
下面的操作都是基于这个student表进行的。
增添数据(insert)
全列插入(全字段插入)
-- insert into 表名 values(...); insert into student values(0,'张三','男');
注意,表结构中有id
字段,虽然设置了主键、自增,MySQL可以自动维护,但是,在全列插入的时候,这个位置还必须写(通常写 0 ,插入后以实际为准),起到站位作用
结果如下:
部分列插入(插入部分列字段)
-- insert into 表名(列1,列2,...) values(值1,值2,...); insert into student(sname, sex) values('李四', '男'); insert into student(sname) values('王五');
结果如下:
同时插入多条数据
-- insert into 表名(列1,...) values(值1,...),(值2,...),(值3,...),...; insert into student(sname,sex) values ("刘备","男"),("貂蝉","女"),("诸葛亮","男");
结果如下:
复制已有表,生成新表
复制已有表的结构和数据。
-- create table 新表名 select * from 已有表名; -- 创建一个student1表,表的结构和数据均来自于student表。 create table student1 select * from student;
结果如下:
只复制已有表的结构(得到的是一个空结构表)。
-- create table 新表名 selsct * from 已有表名 where 0; -- 创建一个student2表,只复制student表的结构,不要里面的数据。 create table student2 select * from student where 0;
结果如下:
修改数据update
update语句要配合where筛选,进行使用,否则修改的就是整张表的记录。
-- update 表名 set 列1=值1,列2=值2,列3=值3,…… where 条件; -- 把sid为3的王五的姓名,改为赵六。 update student set sname="王八" where sid = 3; -- 把sid为6的诸葛亮的名字改为孔明,性别改为猛男。 update student set sname="孔明",sex="猛男" where sid=6;
结果如下:
删除数据
delete
- delete为物理删除(一旦删除就彻底没有了)
- delete语句要配合where筛选,进行使用,否则删除的就是整张表的记录。
-- delete from 表名 where 条件; delete from student where sname="张三";
结果如下:
逻辑删除
注意:其实就是一个修改操作,以下两个语句配合使用
-- 添加一个字段 alter table `student` add `isdelete` enum(1,0) default 0; -- 把不想看到数据 isDelete 设置为 1 update student set isdelete=1 where sid=6; -- 然后显示的时候把 isDelete=1 的值过滤 select * from student where isdelete=0;
注意:delete 属于物理删除,一旦删除,数据就不存在,因此,重要数据建议用逻辑删除,不重要数据采用 delete 删除
truncate和delete的区别
有如下表
- delete删除
- truncate清空
truncate和delete的区别:
-
都是不修改结构,只清除数据。
-
delete删除不释放资源,truncate释放表占用的空间(会重置主键自增)。
-
delete是逐行删除,删除记录是作为事务记录在日志文件中,可进行回滚操作。truncate一次性删除表中所有数据,删除记录不会记录在日志文件中,无法恢复,删除效率高于delete。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?