提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- DML(数据操控语言)
-
- 添加
- 删除
- 删除多条数据
- 删除表中所有数据
- 截断表
- 修改
- 查询
-
- [select 语句](#select 语句)
- 使用别名
- 结果去重
- [一、DML 概述](#一、DML 概述)
- 二、INSERT(插入数据)
-
- [1. 两种常用写法](#1. 两种常用写法)
- [2. 示例](#2. 示例)
- 三、UPDATE(修改数据)
- 四、DELETE(删除数据)
- 五、SELECT(查询数据)
- 六、高频易错点总结(重点)
DML(数据操控语言)
添加
只写表名
值列表需与表结构对应。
insert into 表名 values(值列表),(值列表),(值列表); -- 值列表中的值的顺序、类型、个数必须与表结构一一对应
写表名和字段列表
值列表需与字段列表对应。
insert into 表名(字段列表) values(值列表),(值列表),(值列表); -- 值列表中的值的顺序、类型、个数必须与字段列表一一对应
示例
python
create database if not exists atguigu;
use atguigu;
drop table if exists teacher;
create table teacher(
id int,
name varchar(20),
gender enum('男','女'),
birthday date,
salary double,
tel varchar(11)
);
# 插入一条数据
insert into teacher values(1,'张三','男','1999-01-01',1000,'123456');
insert into teacher(id,name,gender) VALUES(2,'李四','男');
#insert into teacher(id=3,name='王五',gender='不男不女') # 这样写是不行的
SELECT * from teacher
# 插入多条数据
insert into teacher values
(3,'王五','男','1990-01-01',10000,'12345678901'),
(4,'赵六','男','1990-01-01',10000,'12345678901'),
(5,'孙七','男','1990-01-01',10000,'12345678901');
insert into teacher(id,name) VALUES
(6,'周八'),
(7,'吴九'),
(8,'郑十');
select* from teacher;

删除
删除多条数据
delete from 表名 where 条件;
删除表中所有数据
表结构会保留下来。
delete from 表名;
截断表
表结构会保留下来。
truncate 表名;
truncate表和delete表的区别:
delete是一条一条删除记录的。如果在事务中,事务提交之前支持回滚
truncate是把整个表drop,新建一张,效率更高。就算在事务中,也无法回滚
示例
python
-- 删除姓名为郑十的记录
delete from teacher where name="郑十";
select * from teacher;
-- 删除所有记录
delete from teacher;
-- 截断表
truncate teacher;
修改
修改部分行数据
update 表名 set 字段名 = 值, 字段名 = 值 where 条件; -- 修改满足条件的行
修改所有行数据
update 表名 set 字段名 = 值, 字段名 = 值; -- 修改所有行
示例
python
-- 修改周八的信息
update teacher set gender="男",birthday="1960-01-01",salary=100000,tel="12332132131" where name="周八";
-- 修改所有人的薪资
update teacher set salary=salary+10000;#所有有值的都增加,若是没值则不增加
查询
select 语句
select语句是用于查看计算结果,或者查看从数据表中筛选出的数据的
select语句的基本语法;
python
select 常量
select 表达式
select 函数
例如:
select 1;
select 9/2;
select now();
如果想要从数据表中筛选数据,需要加from子句,from指定数据来源,字段列表筛选列
select 字段列表 from 表名;
如果要从数据表中根据条件筛选数据,需要加from和where子句。where筛选行。
select 字段列表 from 表名 where 条件;
使用别名
在当前select语句中给某个字段或表达式计算结果,或表等取个临时名称,便于当前select语句的编写和理解。这个临时名称称为别名。
select 字段名1 as "别名1", 字段名2 as "别名2" from 表名 as 表别名;
列的别名有空格时需要加双引号。列的别名中没有空格时双引号可以不加
表的别名不能加双引号,表的别名中间不能包含空格
as大小写都可以,as也完全可以省略
例如:
select id as 编号,name "姓 名" from teacher;
结果去重
mysql可以在查询结果中使用distinct关键字去重。
select distinct 字段列表 from 表名;
《DML(数据操纵语言)学习笔记》最终总结版
一、DML 概述
DML(Data Manipulation Language)即数据操纵语言 ,用于对数据库表中的数据进行增、删、改、查操作。
DML 包含四大核心操作:
| 操作 | 关键字 | 作用 |
|---|---|---|
| 增加 | INSERT |
向表中插入数据 |
| 修改 | UPDATE |
修改表中已有数据 |
| 删除 | DELETE / TRUNCATE |
删除表中数据 |
| 查询 | SELECT |
查询表中数据(最常用、最复杂) |
二、INSERT(插入数据)
1. 两种常用写法
写法① 只写表名(不推荐新手使用)
sql
INSERT INTO 表名 VALUES (值列表1), (值列表2), ...;
值列表的顺序、个数、类型必须与表结构完全一致。
写法② 推荐写法(指定字段)
sql
INSERT INTO 表名(字段列表) VALUES (值列表1), (值列表2), ...;
值列表只需与前面写的字段列表一一对应,未指定的字段会使用默认值或 NULL。
2. 示例
sql
-- 推荐写法:指定字段插入
INSERT INTO teacher(id, name, gender, birthday, salary)
VALUES (1, '张三', '男', '1999-01-01', 12000.00);
-- 插入多条数据
INSERT INTO teacher(id, name) VALUES
(2, '李四'),
(3, '王五'),
(4, '赵六');
三、UPDATE(修改数据)
语法
sql
UPDATE 表名
SET 字段1 = 值1,
字段2 = 值2
WHERE 条件;
示例
sql
-- 修改特定记录
UPDATE teacher
SET gender = '男',
salary = 88888.88,
birthday = '1995-06-15'
WHERE id = 3;
-- 修改所有记录(危险!慎用)
UPDATE teacher SET salary = salary * 1.2;
四、DELETE(删除数据)
两种删除方式
sql
-- 方式1:DELETE(可回滚,逐行删除)
DELETE FROM 表名 WHERE 条件;
-- 方式2:TRUNCATE(效率高,不可回滚,相当于先DROP再CREATE)
TRUNCATE TABLE 表名;
区别对比(重点)
| 对比项 | DELETE | TRUNCATE |
|---|---|---|
| 是否可回滚 | 可以(事务中) | 不可以 |
| 删除方式 | 一行一行删除 | 先删除表,再重建表 |
| 执行速度 | 较慢 | 较快 |
| 是否保留自增计数 | 保留(自增会继续累加) | 重置(自增从 1 开始) |
| 是否保留表结构 | 保留 | 保留 |
推荐 :开发环境中尽量使用 DELETE + WHERE 条件,生产环境删除大量数据时才考虑 TRUNCATE。
五、SELECT(查询数据)
基础语法
sql
-- 查询常量、表达式、函数
SELECT 1;
SELECT 9*2;
SELECT NOW();
-- 从表中查询
SELECT 字段列表 FROM 表名;
-- 带条件查询
SELECT 字段列表 FROM 表名 WHERE 条件;
常用进阶写法
-
别名(AS):提高可读性
sqlSELECT id AS 编号, name AS '姓名', salary AS '月薪' FROM teacher; -
去重(DISTINCT)
sqlSELECT DISTINCT gender FROM teacher;
六、高频易错点总结(重点)
以下是这篇笔记中最容易出错的地方,按严重程度排序:
-
UPDATE 忘记写 SET(最常见 1064 错误)
- 错误:
update teacher id=3,name='王五'... - 正确:必须写
UPDATE teacher SET ...
- 错误:
-
INSERT 时字段与值不对应
- 字段列表和值列表的顺序、个数、数据类型必须严格一致,否则报错或插入失败。
-
ENUM 类型插入非法值
gender enum('男','女'),却插入'不男不女',会插入失败或变成''(空字符串)。
-
DELETE/TRUNCATE 不加 WHERE 条件
- 误删整张表数据,属于高危操作。永远要先用 SELECT 验证 WHERE 条件再删除。
-
使用 DOUBLE 类型存薪资
- 虽然能运行,但有精度误差。强烈建议使用
DECIMAL(10,2)。
- 虽然能运行,但有精度误差。强烈建议使用
-
别名使用不当
- 别名中有空格必须加双引号:
"姓 名" - 表别名不能加引号,也不能有空格。
- 别名中有空格必须加双引号:
-
TRUNCATE 与 DELETE 混淆
- 很多人在事务中使用
TRUNCATE,以为可以回滚,实际上无法回滚。
- 很多人在事务中使用
-
字符集与 ENUM 中文问题
- 如果字符集不是
utf8mb4,ENUM 中的中文可能出现乱码。
- 如果字符集不是
-
SELECT * 的滥用
- 实际开发中不推荐总是
SELECT *,应明确写出需要的字段。
- 实际开发中不推荐总是