首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 存储:一个完整的数据存储过程是怎样的?
02 | 字段:这么多字段类型,该怎么定义?
03 | 表:怎么创建和修改数据表?
04 | 增删改查:如何操作表中的数据?
05 | 主键:如何正确设置主键?
06 | 外键和连接:如何做关联查询?
07 | 条件语句:WHERE 与 HAVING有什么不同?
08 | 聚合函数:怎么高效地进行分组统计?
09 | 时间函数:时间类数据,MySQL是怎么处理的?
10 | 如何进行数学计算、字符串处理和条件判断?
11 | 索引:怎么提高查询的速度?
12 | 事务:怎么确保关联操作正确执行?
13 | 临时表:复杂查询,如何保存中间结果?
14 | 视图:如何简化查询?
15 | 存储过程:如何提高程序的性能和安全性?
16 | 游标:对于数据集中的记录,该怎么逐条处理?
17 | 触发器:如何让数据修改自动触发关联操作,确保数据一致性?
18 | 权限管理:如何控制数据库访问,消除安全隐患?
19 | 日志(上):系统出现问题,如何及时发现?
20 | 日志(下):系统故障,如何恢复数据?
21 | 数据备份:异常情况下,如何确保数据安全?
22 | 范式:如何消除冗余,实现高效存取?
23 | ER模型:如何理清数据库设计思路?
24 | 查询有点慢,语句该如何写?
25 | 表太大了,如何设计才能提高性能?
26 | 如何充分利用系统资源?
27 | 手把手带你设计一个完整的连锁超市信息系统数据库(上)
28 | 手把手带你设计一个完整的连锁超市信息系统数据库(下)
当前位置:
首页>>
技术小册>>
MySQL必知必会核心内容
小册名称:MySQL必知必会核心内容
### 04 | 增删改查:如何操作表中的数据? 在数据库的世界里,无论是MySQL还是其他关系型数据库管理系统(RDBMS),对表中数据的操作都是核心功能之一。这些操作通常被概括为四个基本动作:增(Insert)、删(Delete)、改(Update)和查(Select),简称CRUD(Create, Read, Update, Delete)。本章将深入讲解如何在MySQL中执行这些操作,以实现对数据库表内数据的有效管理。 #### 4.1 插入数据(Insert) 向表中插入数据是数据库操作中最基础也是最常见的任务之一。在MySQL中,你可以使用`INSERT INTO`语句来实现这一目的。基本语法如下: ```sql INSERT INTO 表名 (列1, 列2, 列3, ..., 列N) VALUES (值1, 值2, 值3, ..., 值N); ``` - **表名**:指定要插入数据的表名。 - **列名**:可选,指定要插入数据的列。如果省略,则必须为表中的每一列提供值,且顺序要与表定义中的列顺序一致。 - **值**:与列名对应的数据值,数据类型需与列定义相匹配。 **示例**: 假设有一个名为`students`的表,包含`id`(主键,自增)、`name`(姓名)、`age`(年龄)和`grade`(年级)四个字段,你可以这样插入一条记录: ```sql INSERT INTO students (name, age, grade) VALUES ('张三', 18, '高三'); ``` 由于`id`字段被设置为自增,因此在插入时无需指定其值,MySQL会自动为其分配一个唯一的值。 #### 4.2 查询数据(Select) 查询数据是数据库操作中最频繁使用的功能。`SELECT`语句用于从数据库表中检索数据。其基本语法如下: ```sql SELECT 列名1, 列名2, ..., 列名N FROM 表名 WHERE 条件; ``` - **列名**:指定要从表中检索的列。使用`*`可以检索所有列。 - **表名**:指定要从中检索数据的表名。 - **WHERE**:可选,用于指定检索数据的条件。如果省略,则检索表中的所有行。 **示例**: 查询`students`表中所有学生的姓名和年级: ```sql SELECT name, grade FROM students; ``` 查询`students`表中年龄大于18岁的学生信息: ```sql SELECT * FROM students WHERE age > 18; ``` #### 4.3 更新数据(Update) 当需要修改表中已存在的数据时,可以使用`UPDATE`语句。其基本语法如下: ```sql UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2, ..., 列名N = 值N WHERE 条件; ``` - **表名**:指定要更新数据的表名。 - **SET**:后跟要更新的列及其新值。 - **WHERE**:指定哪些行需要被更新。如果省略WHERE子句,则表中的所有行都会被更新,这通常是不希望发生的。 **示例**: 将`students`表中名为'张三'的学生的年级更新为'大一': ```sql UPDATE students SET grade = '大一' WHERE name = '张三'; ``` #### 4.4 删除数据(Delete) 当需要从表中移除数据时,可以使用`DELETE`语句。其基本语法如下: ```sql DELETE FROM 表名 WHERE 条件; ``` - **表名**:指定要从中删除数据的表名。 - **WHERE**:指定哪些行需要被删除。如果省略WHERE子句,则表中的所有行都会被删除,这是一个非常危险的操作,应谨慎使用。 **示例**: 删除`students`表中年龄小于16岁的学生记录: ```sql DELETE FROM students WHERE age < 16; ``` #### 4.5 进阶操作 ##### 4.5.1 批量插入 在某些情况下,你可能需要一次性向表中插入多条记录。虽然MySQL标准SQL语法不支持直接在一条`INSERT`语句中插入多行数据,但你可以通过一条`INSERT`语句后跟多个`VALUES`列表来实现,每个列表之间用逗号分隔。 **示例**: ```sql INSERT INTO students (name, age, grade) VALUES ('李四', 17, '高二'), ('王五', 18, '高三'), ('赵六', 19, '大一'); ``` ##### 4.5.2 使用子查询更新或删除数据 `UPDATE`和`DELETE`语句中的`WHERE`子句不仅可以包含简单的条件表达式,还可以包含子查询,从而基于其他表中的数据来更新或删除记录。 **示例**(假设有另一个表`grades`记录了每个学生的成绩): ```sql -- 假设要删除所有成绩不及格的学生 DELETE FROM students WHERE id IN (SELECT student_id FROM grades WHERE score < 60); -- 假设要根据成绩更新学生的年级 UPDATE students SET grade = CASE WHEN id IN (SELECT student_id FROM grades WHERE score >= 90) THEN '优秀' WHEN id IN (SELECT student_id FROM grades WHERE score >= 75 AND score < 90) THEN '良好' ELSE '一般' END WHERE id IN (SELECT student_id FROM grades); ``` #### 4.6 注意事项 - 在执行`UPDATE`和`DELETE`操作时,务必谨慎使用`WHERE`子句,以避免误操作导致数据丢失。 - 对于重要的数据操作,建议先在测试环境中验证SQL语句的正确性。 - 考虑到性能问题,对于大量数据的插入、更新和删除操作,可能需要考虑分批处理或使用事务来确保数据的一致性和完整性。 - 合理利用索引可以显著提高查询、更新和删除操作的效率。 通过本章的学习,你应该已经掌握了MySQL中增删改查的基本操作,并能够在实际应用中灵活运用这些技能来管理数据库中的数据。记住,良好的数据库设计、合理的索引策略以及谨慎的操作习惯是确保数据库高效运行的关键。
上一篇:
03 | 表:怎么创建和修改数据表?
下一篇:
05 | 主键:如何正确设置主键?
该分类下的相关小册推荐:
MySQL从入门到精通(四)
MySQL 实战 45 讲
MySQL从入门到精通(一)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(五)
MySQL从入门到精通(三)
MySQL8.0入门与实践
MySQL从入门到精通(二)
SQL零基础到熟练应用(增删改查)
MySQL必会核心问题