掘金 后端 ( ) • 2024-05-14 11:24

theme: smartblue

Nodejs 第三十五章 SQL语句之增删改

前提回顾

  • 上一章节中,我们学习了数据库的各种常用的查询语句,接下来的这章节中,我们就要学习增删改查中的其他三个部分增删改

新增

  • 开头还是以操作类型关键字为首
    • 操作类型关键字INSERT INTO,这是一个用来添加数据到数据库表中的SQL命令。
    • 目标对象user,这是操作的目标表名,表示数据将被插入到这个名为 user 的表中。

VALUES 关键词

  • VALUES 是 SQL 语言中的一个关键词,它用于指定在 INSERT 操作中要插入表中的数据值。这个关键词后面通常会跟一组括号,括号内包含了与表中列相对应的数据值,按照表中列的顺序排列
    • 通过对VALUES的介绍了解,我们就知道填充内容的规律是以对应顺序进行依次填充
    • 并且新增是可以新增多个的,只需要在填充内容后面加上逗号就能继续延续下去。在我们上一章节中有讲到,逗号也是可以作为并列来理解的,此时我们就能明白要如何去进行使用
    • 填充的时候,要记得看下是否符合填充规则(也就是我们一开始创建表所设立的),例如有的表内容允许为空,有的不允许,都是需要在心中有所预估

新增案例

# INSERT INTO 表名(列名,....) VALUES (值,....)
INSERT INTO `user`(`name`,`age`,`address`) VALUES('小余2',22,'北京') 

# 新增多个
INSERT INTO `user`(`name`,`age`,`address`) VALUES('小余3',23,'浙江') ,('小余4',24,'四川')

image-20240507171627798

编辑(改)

  • 操作类型关键字UPDATE,这是用来修改表中现有记录的 SQL 命令。
  • 目标对象:表名,指定要更新数据的目标表。

接下来是设置新值的部分,这不是通过 VALUES 关键词,而是通过 SET 关键词来完成。

SET 关键词

SET 是 SQL 语言中用于 UPDATE 语句的一个关键词,它用于指定要更新的列和新的值。我们可以一次更新一个或多个列。如果需要更新多个列,一样可以使用逗号来分隔每个列的赋值语句。

  • WHERE:这个子句用于指定哪些行将被更新。没有 WHERE 子句会导致表中的所有行都被更新,这通常不是预期的效果,因此使用 WHERE 子句来限定操作的范围是非常重要的安全措施。
  • WHERE 子句放在 SET 之后,能帮助我们在定义了所有要更改的列和值之后,进一步明确这些更改应用于哪些特定的行。这种顺序使 SQL 语句的读写更加直观,因为它遵循了人们处理任务的自然逻辑:先决定做什么(设置值),然后确定对谁做(选择行)。如果 WHERE 子句放在 SET 之前,它可能会在逻辑上造成混淆,因为还没有定义要进行的更改就已经在限定更改的范围
  • 可以理解为,我先决定要吃什么菜,在根据要吃的菜去挑选餐厅。我想在点外卖的时候,大家应该都是这个逻辑,很少有人点外卖是输入店名的吧?大多数应该都是搜索自己想吃什么菜。而这个就是我们的基础逻辑,先决定吃什么,再确定去哪家店吃
UPDATE 表名
SET 列名1 = 新值1, 列名2 = 新值2, ...
WHERE 条件;

更改案例

  • 我们可以通过三行来拆开了解
    • 在这个例子中,我们选择了 user 表中名为 '小余2' 的用户,将其年龄改为 25,地址改为 '上海'。
    • 使用 SET 关键字来指定我们想要更新的列和对应的新值。
    • WHERE 子句确保只有名字为 '小余2' 的记录被更新。
-- 更新 `user` 表中,名为 '小余2' 的记录的年龄为 25
UPDATE `user`
SET `age` = 25
WHERE `name` = '小余2';

删除

删除是最简单的案例,只是最好是一定要在最后添加WHERE子句(删除不规范,亲人两行泪)

  • 操作类型关键字DELETE,这是用来删除表中记录的 SQL 命令。
  • 目标对象:表名,指定从哪个表中删除数据。

DELETE 关键词

DELETE 是 SQL 语言中用于删除数据的关键词,它用于从表中移除满足特定条件的行。在使用 DELETE 语句时,我们需要非常小心,因为如果不正确使用,可能会导致删除过多的数据。

  • WHERE:这个子句在 DELETE 语句中扮演着至关重要的角色。它用于指定哪些行将被删除。如果省略 WHERE 子句,将会删除表中的所有行,这通常是非常危险且不可取的操作,因为一旦执行,数据无法恢复。
  • WHERE 子句放在 DELETE 关键字之后,可以确保我们在指定删除操作之前明确了哪些行应该被删除。这种布局符合直观的逻辑处理顺序和前面编辑是一样的
    • 可以这么理解:决定扔掉不再需要的衣物。我们需要先整理衣柜,然后才挑选出哪些衣物不再需要,而不是盲目地开始扔掉衣服。
DELETE FROM 表名
WHERE 条件;

删除案例

  • 删除是可以删除多个的,使用IN操作符就行
    • 使用IN操作符能够更加精准的去操作,这里也是可以使用各种算术表达式的。比如说我们案例好像是有点傻,要删除id是1-5的,我们直接IN(id<6)就稳健了对吧,越复杂就越考验自己的数学和逻辑功底了
    • 剩下没有什么好需要讲解的,最需要注意的就是,自己到底想要删除什么?所以精髓都在WHERE判断子句里面
# 删除id为6的
DELETE FROM `user`
WHERE id=6;

# 把id是1-5的全删了
DELETE FROM `user`
WHERE id IN(1,2,3,4,5);

子句

在 SQL 中,子句是构成 SQL 语句的各个组成部分,用于定义和限制 SQL 操作的具体行为和作用范围。子句的使用极大地提高了 SQL 语句的灵活性和表达力,能让数据操作更加精确和高效。

  • 在MySQL这几章节中,涉及到了各种子句,子句又是什么?有哪些子句?子句的作用对于写SQL语句有什么意义吗?我们为什么那么需要子句?
    • 一个个问题都值得我们去解答

常见的 SQL 子句

  1. SELECT - 指定要查询的列。
  2. FROM - 指定查询的主要数据源或表。
  3. WHERE - 对结果集进行条件限制,只返回满足条件的行。
  4. ORDER BY - 指定结果集的排序方式。
  5. GROUP BY - 指定对结果集进行分组的列,通常与聚合函数一起使用。
  6. HAVING - 对 GROUP BY 生成的分组结果进行条件限制。
  7. JOIN - 指定如何将行从两个或多个表结合起来。
  8. SET - 在 UPDATE 语句中使用,指定要更新的列和对应的新值。
  9. LIMIT - 限制结果集的数量,常用于分页处理。

子句的作用

  • 结构化和组织:子句帮助在 SQL 语句中清晰地定义操作的具体部分,使语句的结构更加有条理。
  • 精确控制:通过使用各种子句,可以精确控制数据操作的细节,如筛选、排序、限制结果集等。
  • 性能优化:合理使用子句可以优化查询的性能,如通过 WHERE 子句减少处理的数据量。
  • 灵活性和功能性:子句的组合使用为 SQL 提供了极高的灵活性,能够应对复杂的数据查询和处理需求。

子句的位置

  • 子句在SQL命令中的位置通常取决于它的功能和SQL语句的结构。
    • 我们来通过以下一些例子来观察一下规律吧,都是有对应的内在合理逻辑的
  1. FROM子句
    • 位置:通常紧跟在SELECT关键字之后。
    • 原因:FROM子句用于指定SELECT操作要查询的表。因为在进行字段选择之前,SQL解析器需要知道数据来自哪个表,以便能正确解析和检索指定的列。
  2. WHERE子句
    • 位置:通常位于FROM子句之后,任何GROUP BY或ORDER BY子句之前。
    • 原因:WHERE子句用于过滤记录,它需要在数据被聚合或排序之前应用,以确保只处理符合条件的记录。
  3. GROUP BY子句
    • 位置:在WHERE子句之后,ORDER BY子句之前。
    • 原因:GROUP BY用于根据一个或多个列对结果集进行分组。因为分组操作必须在记录筛选之后和排序操作之前进行,以确保正确的数据聚合。
  4. ORDER BY子句
    • 位置:通常是SELECT语句的最后部分。
    • 原因:ORDER BY用于对结果集进行排序。它位于语句的末尾是因为排序通常是查询处理的最后一步,确保所有的筛选、分组和聚合操作已完成。
  5. LIMIT子句
    • 位置:在SELECT语句的最末端,通常跟在ORDER BY子句之后。
    • 原因:LIMIT用于限制查询结果的数量,放在最后确保先完成所有的选择、过滤、分组和排序操作,然后才对最终结果集应用数量限制。