数据库入门学习总结
从 SQL 基础查询到前后端交互数据库入门学习总结一、前言在前期学习了 Python 基础、接口调用等知识后本周正式进入数据库领域的学习。数据库是软件开发中不可或缺的一部分它承担着数据存储、管理、查询和维护等重要工作。通过本周的学习我初步接触了 SQLStructured Query Language结构化查询语言了解了如何通过 SQL 语句对数据库中的数据进行操作也开始认识到数据库与前端页面、后端接口之间的联系。本次学习主要围绕 SQL 核心查询语法、数据表增删改查、SQL 事务以及前后端交互展开。本文将对相关知识进行梳理并结合简单案例记录学习过程中的理解。二、SQL 核心查询语法SQL 是操作关系型数据库的重要语言。在实际开发中我们经常需要从数据库中获取符合条件的数据并对数据进行筛选、分类、统计和排序。因此掌握 SQL 查询语句是数据库学习的基础。1. SELECT数据查询SELECT 是 SQL 中最基础、最常用的查询语句用于从数据表中获取指定字段的数据。基本语法SELECT字段名FROM表名;例如查询学生表中的所有学生信息SELECT*FROMt_student;其中*表示查询表中的全部字段。如果只需要查询学生姓名和联系电话可以指定字段SELECTname,phoneFROMt_student;通过 SELECT我们可以根据实际需求获取需要的数据避免查询不必要的字段。2. WHERE条件筛选如果只需要获取满足特定条件的数据就可以使用 WHERE 进行筛选。基本语法SELECT字段名FROM表名WHERE条件;例如查询一组中的所有学生SELECT*FROMt_studentWHEREgroup_no1组;WHERE 还可以结合比较运算符、逻辑运算符进行更加复杂的条件判断。常见运算符包括等于!或不等于大于小于大于等于小于等于AND同时满足多个条件OR满足其中一个条件LIKE模糊查询IN匹配指定范围内的值IS NULL判断字段是否为空例如查询电话号码以 138 开头的学生SELECT*FROMt_studentWHEREphoneLIKE138%;这里的%表示任意长度的字符因此LIKE 138%可以匹配所有以 138 开头的电话号码。3. NOT IN排除指定数据NOT IN 用于排除某些指定的数据适合处理多个排除条件。基本语法SELECT*FROM表名WHERE字段NOTIN(值1,值2);例如查询不属于 1 组和 2 组的学生SELECT*FROMt_studentWHEREgroup_noNOTIN(1组,2组);与多个!条件相比NOT IN 在需要排除多个指定值时更加简洁。需要注意的是如果字段中存在 NULLNOT IN 的判断结果可能与预期不同因此需要根据实际业务需求处理空值。4. ORDER BY数据排序ORDER BY 用于对查询结果进行排序。基本语法SELECT*FROM表名ORDERBY字段名ASC;其中ASC升序排列也是默认排序方式。DESC降序排列。例如按照学生生日从早到晚进行排序SELECT*FROMt_studentORDERBYbirthdayASC;如果希望按照生日从晚到早排列则可以使用 DESC。5. GROUP BY数据分组统计在实际开发中我们不仅需要查询单条数据还经常需要对数据进行分类统计。GROUP BY 可以按照指定字段对数据进行分组通常与 COUNT、SUM、AVG、MAX、MIN 等聚合函数配合使用。基本语法SELECT分组字段,COUNT(*)FROM表名GROUPBY分组字段;例如统计每个班级有多少名学生SELECTgroup_no,COUNT(*)FROMt_studentGROUPBYgroup_no;这里的 COUNT(*) 用于统计每个分组中的记录数量。常见聚合函数COUNT()统计数量SUM()计算总和AVG()计算平均值MAX()获取最大值MIN()获取最小值通过 GROUP BY可以将原本分散的数据按照某种规则进行归类从而完成统计分析。6. HAVING对分组结果进行筛选HAVING 与 WHERE 都具有筛选功能但两者的使用场景有所不同。WHERE在分组之前筛选原始数据。HAVING在分组之后筛选分组结果。例如查询学生人数大于 5 人的班级SELECTgroup_no,COUNT(*)AStotalFROMt_studentGROUPBYgroup_noHAVINGCOUNT(*)5;这里先通过 GROUP BY 按班级分组再使用 HAVING 筛选出人数超过 5 人的班级。三、多表连接查询JOIN 与 LEFT JOIN在关系型数据库中数据通常不会全部存放在一张表中而是根据不同业务需求拆分成多张数据表。例如学生信息可能存放在学生表中班级信息则存放在班级表中。如果需要同时查询学生姓名和班级名称就需要使用多表连接查询。1. JOIN内连接JOIN 通常指 INNER JOIN即内连接。它会根据指定的关联条件将两张表中能够匹配的数据组合起来只返回两张表中满足连接条件的记录。基本语法SELECT*FROM表1JOIN表2ON表1.关联字段表2.关联字段;例如SELECT*FROMstudentJOINclassONstudent.class_idclass.id;这里通过学生表中的 class_id 与班级表中的 id 建立关联从而获取学生与班级对应的信息。2. LEFT JOIN左连接LEFT JOIN 又称左外连接。它会保留左表中的全部记录即使右表中没有与之匹配的数据也会保留左表记录并将右表对应字段显示为 NULL。基本语法SELECT*FROM表1LEFTJOIN表2ON表1.关联字段表2.关联字段;例如SELECT*FROMstudentLEFTJOINclassONstudent.class_idclass.id;与普通 JOIN 相比LEFT JOIN 能够保留没有关联班级信息的学生记录。3. JOIN 与 LEFT JOIN 的区别对比内容JOIN内连接LEFT JOIN左连接左表数据只保留匹配记录保留全部记录右表数据只保留匹配记录匹配则显示数据不匹配则为 NULL主要用途查询存在关联关系的数据查询左表全部数据及其关联信息在实际使用中需要根据业务需求选择合适的连接方式。如果只关心两张表中能够匹配的数据可以使用 JOIN如果需要保留左表全部记录则应该使用 LEFT JOIN。四、数据表的增删改查除了查询数据之外数据库还需要支持数据的创建、插入、修改和删除这些操作通常被称为 CRUD。CRUD 分别代表Create创建或新增。Read读取或查询。Update更新或修改。Delete删除。1. INSERT新增数据INSERT 用于向数据表中插入新的记录。INSERTINTOt_student(name,phone)VALUES(张三,13800000000);通过指定字段和对应的值可以向学生表中新增一条学生信息。2. UPDATE修改数据UPDATE 用于修改数据表中已有的记录。UPDATEt_studentSETphone13900000000WHEREname张三;这里通过 WHERE 指定需要修改的记录。需要特别注意如果 UPDATE 不添加 WHERE 条件就可能修改整张表中的数据因此实际操作时必须谨慎。3. DELETE删除数据DELETE 用于删除数据表中的记录。DELETEFROMt_studentWHEREname张三;通过 WHERE 可以指定删除范围。如果不添加条件则可能删除表中的全部记录。4. CREATE TABLE创建数据表在实际开发中还需要根据业务需求建立数据表。例如CREATETABLEstudent(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50),phoneVARCHAR(20));其中PRIMARY KEY 表示主键AUTO_INCREMENT 表示自动递增VARCHAR 用于存储可变长度的字符串。通过以上操作可以初步完成数据库中数据的创建、添加、查询、修改和删除。五、SQL 事务保障数据操作的一致性在学习数据库的过程中事务也是一个非常重要的知识点。事务可以理解为一组需要作为整体执行的数据库操作。它能够保证多个操作要么全部成功要么在发生错误时撤销相关修改从而避免出现数据不一致的问题。1. 事务的四大特性ACID事务具有四个核心特性1原子性Atomicity事务中的操作是一个不可分割的整体要么全部执行成功要么全部失败不会只完成其中一部分。2一致性Consistency事务执行前后数据库都应该满足既定的数据约束和业务规则保证数据处于正确状态。3隔离性Isolation多个事务同时执行时彼此之间应该保持一定程度的隔离避免相互干扰。4持久性Durability事务一旦提交修改结果就应该被持久保存即使发生系统故障也不应该轻易丢失。2. COMMIT 与 ROLLBACK事务中两个重要的操作分别是提交和回滚。COMMIT提交事务正式保存事务中的修改。ROLLBACK回滚事务撤销尚未提交的事务修改。例如在银行转账场景中A 账户向 B 账户转账 100 元需要完成两个操作A 账户扣除 100 元。B 账户增加 100 元。如果只完成了 A 账户扣款却没有完成 B 账户收款就会造成数据错误。可以通过事务保证两个操作作为一个整体执行STARTTRANSACTION;UPDATEaccountSETbalancebalance-100WHEREid1;UPDATEaccountSETbalancebalance100WHEREid2;COMMIT;如果执行过程中发生错误可以使用ROLLBACK;撤销当前事务中尚未提交的修改。通过这个案例可以发现事务的价值不仅在于保存数据更重要的是保障多个数据库操作之间的整体性和数据一致性。六、前后端交互连接页面、接口与数据库数据库学习的另一个重要方向是理解前端、后端和数据库之间的关系。在此前的 Python 学习中我已经初步接触过 FastAPI 接口开发。本周进一步了解到前端页面、后端接口和数据库并不是彼此独立的它们需要通过一定的交互流程共同完成业务功能。1. 前端、后端与数据库的职责前端Frontend负责页面展示和用户交互。例如用户在网页中输入姓名、点击查询按钮或者提交一份表单这些操作通常由前端负责。后端Backend负责接收前端发送的请求处理业务逻辑并根据需求操作数据库。例如使用 Python 的 FastAPI 创建接口接收前端传递的数据执行查询或修改操作再将处理结果返回给前端。数据库Database负责存储和管理业务数据。当后端需要查询用户信息时会向数据库发送 SQL 语句并获取对应的数据结果。2. 前后端交互的基本流程以网页查询学生信息为例完整流程可以分为以下几个步骤用户在前端页面输入查询条件。前端通过 HTTP 请求向后端接口发送数据。后端接收请求并解析前端传递的参数。后端根据业务需求执行 SQL 查询。数据库返回查询结果。后端对结果进行处理并通过接口返回数据。前端接收后端返回的数据并将其展示在页面上。整个过程可以简单理解为前端页面 → HTTP 请求 → 后端接口 → 数据库 → 后端处理 → 返回前端展示3. 前后端连接的意义理解这条数据流转链路是从单纯学习语法走向实际项目开发的重要一步。例如一个学生信息管理系统不仅需要通过 SQL 查询数据库中的学生信息还需要通过后端接口将数据传递给前端最终在网页中展示出来。这意味着掌握 SQL 只是数据库应用的一部分还需要理解接口请求、数据传递和后端处理等知识才能真正实现一个完整的业务功能。七、学习总结与后续提升方向通过本周的学习我初步建立了数据库知识体系掌握了 SELECT、WHERE、NOT IN、GROUP BY、JOIN、LEFT JOIN、HAVING、ORDER BY 等核心 SQL 语法也了解了数据表增删改查、事务的基本概念以及前后端交互的基本流程。但在实际练习中也发现了一些不足。首先综合查询能力仍然不够熟练。单独使用 SELECT、WHERE 或 GROUP BY 时能够理解但当题目要求同时使用多表连接、日期筛选、分组统计和排序时容易出现思路混乱的情况。其次对事务的理解还停留在基本概念层面对于 COMMIT 和 ROLLBACK 在实际业务中的应用还需要进一步练习。最后前后端交互的完整流程尚未完全掌握尤其是前端如何发送请求、后端如何连接数据库以及数据库查询结果如何返回前端这些内容仍需要通过实际项目进行巩固。针对以上问题后续将重点开展以下练习强化 SQL 综合查询多练习 JOIN、WHERE、GROUP BY、HAVING 和 ORDER BY 的组合使用提高复杂查询的独立编写能力。深入理解事务结合转账等实际业务案例练习事务开启、提交和回滚理解事务在数据一致性中的作用。完成前后端数据库连接尝试使用 FastAPI 创建接口连接数据库实现基本的数据查询和修改功能。通过项目巩固知识将数据库查询与实际页面交互结合起来在动手实践中理解完整的数据流转过程。八、结语数据库是软件开发的重要基础而 SQL 则是操作和管理数据库的核心工具。本周的学习让我从单纯的数据查询逐步接触到数据管理、事务控制以及前后端交互也让我意识到真正掌握一项技术不能只停留在理解语法和记忆概念上更重要的是能够将不同知识点联系起来并运用到实际业务场景中。接下来我会继续加强 SQL 综合查询训练深入理解事务机制并尝试打通 FastAPI 与数据库之间的连接逐步实现从基础语法学习到实际项目应用的转变。