重头开始嵌入式第三十四天(数据库二)

sqlite3的一些补充

目录

sqlite3的一些补充

1.事物

2.连接,联合

3.触发器

4.子查询


1.事物

数据库事务是数据库管理系统执行过程中的一个逻辑单位,它由一系列对数据库的操作组成。
 
一、事务的特性
 
1. 原子性(Atomicity)
- 事务中的所有操作要么全部成功执行,要么全部不执行。如果事务中的任何一个操作失败,整个事务将回滚到事务开始前的状态。
- 例如,在银行转账过程中,从一个账户扣款和向另一个账户存款这两个操作必须作为一个事务来执行。如果扣款成功但存款失败,那么事务将回滚,确保两个账户的状态都不会发生变化。
2. 一致性(Consistency)
- 事务必须使数据库从一个一致性状态转变为另一个一致性状态。这意味着事务执行前后,数据库中的数据必须满足特定的约束条件。
- 例如,在一个订单管理系统中,事务必须确保订单的状态和库存的数量保持一致。如果一个订单被创建,那么相应的库存数量必须减少;如果订单被取消,库存数量必须恢复。
3. 隔离性(Isolation)
- 多个事务并发执行时,它们之间应该相互隔离,不能相互干扰。每个事务都应该感觉不到其他事务的存在,就好像在独立地使用数据库一样。
- 例如,两个用户同时对同一个数据库表进行修改操作时,数据库管理系统必须确保每个事务看到的数据是一致的,并且不会相互影响。
4. 持久性(Durability)
- 一旦事务被提交,它对数据库的修改就应该是永久的,即使系统发生故障也不会丢失。
- 例如,在一个电子商务系统中,当用户成功下单并支付后,订单信息被保存到数据库中。即使系统突然断电,当系统重新启动后,订单信息仍然应该存在。
 
二、事务的用途
 
1. 确保数据完整性
- 在复杂的业务逻辑中,可能涉及多个数据库操作。事务可以确保这些操作要么全部成功,要么全部失败,从而保证数据的完整性。
- 例如,在一个财务系统中,记录一笔收入和更新账户余额这两个操作必须作为一个事务来执行,以确保数据的准确性。
2. 提高并发性能
- 数据库管理系统可以通过事务的隔离级别来控制并发事务之间的相互影响,从而提高系统的并发性能。
- 例如,在一个高并发的在线交易系统中,可以通过设置适当的事务隔离级别来减少事务之间的冲突,提高系统的吞吐量。
3. 简化错误处理
- 当事务中的某个操作失败时,事务可以自动回滚到事务开始前的状态,这使得错误处理变得更加简单。
- 例如,在一个数据导入过程中,如果某个数据记录不符合格式要求,事务可以回滚,避免将错误的数据插入到数据库中。

2.连接,联合

在数据库中,“连接”和“联合”都是用于操作多个表以获取所需数据的重要概念。
 
一、连接(Join)
 
1. 定义
- 连接操作是根据两个或多个表之间的共同列,将这些表组合在一起,以获取更全面的数据集。
2. 类型
- 内连接(Inner Join):只返回两个表中满足连接条件的行。例如,有一个“学生表”和一个“成绩表”,通过学生的 ID 进行内连接,将只返回有成绩记录的学生信息。


- 外连接(Outer Join):包括左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。左外连接返回左表中的所有行以及右表中满足连接条件的行;右外连接则相反;全外连接返回两个表中的所有行,无论是否满足连接条件。


- 交叉连接(Cross Join):也称为笛卡尔积,它返回两个表中所有行的组合。如果两个表分别有 m 行和 n 行,那么交叉连接将返回 m×n 行。
 
二、联合(Union)
 
1. 定义
- 联合操作将两个或多个具有相同列结构的结果集合并为一个结果集。
2. 特点
- 要求参与联合的各个查询结果集具有相同的列数和数据类型。例如,可以将两个不同的查询结果集联合起来,以获取更广泛的数据集。
- 去除重复行(默认情况),但可以使用 UNION ALL 保留所有行,包括重复行。
 
连接和联合在数据库查询和数据处理中都起着重要的作用,可以根据具体的需求选择合适的操作来获取所需的数据。

3.触发器

在数据库中,触发器是一种特殊的存储过程,它在特定的数据库事件发生时自动执行。
 
一、触发器的作用
 
1. 数据完整性维护
- 可以在插入、更新或删除数据时,自动检查数据的合法性,并采取相应的措施来确保数据的完整性。例如,可以在插入订单数据时,检查库存数量是否足够,如果不足则拒绝插入并给出提示。
2. 数据同步
- 当一个表中的数据发生变化时,可以自动更新其他相关表中的数据,以保持数据的一致性。例如,当一个客户的联系方式在客户表中被更新时,可以自动更新与该客户相关的订单表中的联系方式。
3. 审计跟踪
- 可以记录数据库中的特定操作,以便进行审计和跟踪。例如,可以记录对重要数据表的插入、更新和删除操作,以及执行这些操作的用户和时间。
 
二、触发器的类型
 
1. 插入触发器(INSERT Trigger)
- 在向表中插入数据时触发。可以用于检查插入的数据是否符合特定的条件,或者在插入数据后自动执行一些其他操作。
2. 更新触发器(UPDATE Trigger)
- 在更新表中的数据时触发。可以用于检查更新后的数据是否符合特定的条件,或者在更新数据后自动执行一些其他操作。
3. 删除触发器(DELETE Trigger)
- 在从表中删除数据时触发。可以用于检查删除操作是否符合特定的条件,或者在删除数据后自动执行一些其他操作。
 
三、触发器的注意事项
 
1. 性能影响
- 触发器的自动执行可能会对数据库的性能产生一定的影响,特别是在频繁触发的情况下。因此,在设计触发器时,应尽量避免复杂的逻辑和大量的计算,以减少对性能的影响。
2. 调试困难
- 由于触发器是自动执行的,调试起来可能比较困难。在开发过程中,应充分测试触发器的功能,以确保其正确性。
3. 维护成本
- 随着数据库结构和业务逻辑的变化,触发器可能需要进行相应的修改和维护。因此,在设计触发器时,应考虑到未来的可维护性。

4.子查询

在数据库中,子查询是一种嵌套在其他查询内部的查询语句。

一、子查询的作用

1. 数据筛选

- 可以在查询中作为条件的一部分,用于筛选满足特定条件的数据。例如,可以使用子查询找出销售额高于平均销售额的产品。

- 先通过子查询计算出平均销售额,然后在外部查询中筛选出销售额高于这个平均值的产品。

2. 数据生成

- 可以作为一个临时表,为外部查询提供数据。例如,可以使用子查询生成一个包含特定条件的产品列表,然后在外部查询中对这个列表进行进一步的操作。

- 子查询生成的结果集可以像普通表一样在外部查询中被引用和操作。

二、子查询的类型

1. 标量子查询

- 返回单个值的子查询。这个值可以在外部查询中作为一个常量来使用。例如,可以使用标量子查询找出某个特定客户的最大订单金额。

- 外部查询可以使用这个返回的单个值进行比较或其他运算。

2. 列子查询

- 返回一列数据的子查询。这个结果集可以在外部查询中作为一个临时表的列来使用。例如,可以使用列子查询找出所有属于某个类别产品的名称。

- 外部查询可以对这个列进行聚合、筛选等操作。

3. 行子查询

- 返回一行数据的子查询。这个结果集可以在外部查询中作为一个临时表的行来使用。例如,可以使用行子查询找出某个特定产品的详细信息。

- 外部查询可以对这个行进行比较、更新等操作。

三、子查询的注意事项

1. 性能问题

- 复杂的子查询可能会导致性能下降,特别是当子查询需要大量的数据处理或与外部查询频繁交互时。在设计查询时,应尽量避免使用过于复杂的子查询,或者考虑使用其他方法来实现相同的功能。

- 可以通过优化数据库结构、建立合适的索引等方式来提高子查询的性能。

2. 可读性

- 嵌套的子查询可能会使查询语句变得复杂,难以理解。在编写子查询时,应尽量使用清晰的命名和注释,以便于其他人阅读和维护代码。

- 可以将复杂的子查询拆分成多个简单的查询,或者使用临时表来提高查询的可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419940.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:目录及文件管理

目录及文件管理 cd的命令使用 . 当前目录 .. 父目录(上一层) ~ 表示家目录 家目录:专门存放用户个性化信息的目录 ~user:用户user的家目录 /root: 是Linux管理员的家目录 /home: 存放所有普通用户的家目录]# cd ~root #去…

大模型LLM算法工程师技术面试指南

大模型LLM算法工程师技术面试指南 AI大模型全套学习资料 “最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。 这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。 我在一线互联网企业工作十余年里,指导过不少…

Java异常类

目录 Java异常类 Java中的异常体系 抛出异常 处理异常 处理异常的两种方式 try...catch和throws的区别 finally关键字 抛出异常注意事项 自定义异常类 Java异常类 Java中的异常体系 在Java中,异常类的父类为Throwable类,在Throwable下&#x…

记一次高版本view-design的组件迁移到自身项目的低版本

背景 npm i -S view-design当前老项目使用view-design这个组件库,但是当我们去官网查看该组件库最新版本,竟然发现没有博主想用的image/ImagePreivew这两个基础组件 说实话,有点离谱了哈!! 自己造轮子? …

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存(存储) 1.2、研究目的 如何存储数据(变量,数组....)程序数据结构算法 1.3、常见保存数据的方法 数组:保存自己的数据指针:是间接访问已经存在的…

分库分表核心理念

文章目录 分库,分表,分库分表什么时候分库?什么时候分表?什么时候既分库又分表?横向拆分 & 纵向拆分 分表算法Range 范围Hash 取模一致性 Hash斐波那契散列 严格雪崩标准(SAC)订单分库分表实…

【880高数】高等数学一刷错题整理

第一章 函数、极限、连续 2024.8.11日 1. 2. 3. 4. 5. 2024.8.12日 1. 2. 3. 4. 5. 6. 7. 8. 2024.8.13日 1. 2. 3. 4. 2024.8.14日 1. 2. 3. 4. 5. 第二章 一元函数微分学及其应用 2024.8.15日 1. 2. 3. 4. 5. 6. 2024.8.16日 1. 2. 3. 4. 5. 2024.8.17日 1. 2. 3. 4…

个人简历 (自己设计的)

欢迎大家来观看。 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…

相亲交友系统背后的科技力量:智能匹配的秘密

随着互联网技术的发展&#xff0c;相亲交友系统已经成为许多人寻找另一半的重要工具。这些相亲交友系统不仅仅是一个简单的社交平台&#xff0c;它们背后隐藏着强大的科技力量&#xff0c;尤其是智能匹配技术&#xff0c;使得用户能够更加高效地找到适合自己的伴侣。 相亲交友…

信息学奥赛初赛天天练-87-NOIP2014普及组-完善程序-矩阵、子矩阵、最大子矩阵和、前缀和、打擂台求最大值

1 完善程序 最大子矩阵和 给出 m行 n列的整数矩阵&#xff0c;求最大的子矩阵和(子矩阵不能为空)。 输入第一行包含两个整数 m和 n&#xff0c;即矩阵的行数和列数。之后 m行&#xff0c;每行 n个整数&#xff0c;描述整个矩阵。程序最终输出最大的子矩阵和。 &#xff08;最…

C语言俄罗斯方块(VS2022版)

C语言俄罗斯方块 演示视频一、前置知识1.Win32 API 的使用2.宽字符的使用 二、封装核心数据与框架介绍三、核心操作介绍旋转操作检测操作水平检测竖直检测代码化简 四、源码展示在 tetris.h 中&#xff1a;在 tetris.c 中&#xff1a;在 test.c 中&#xff1a; 以下代码环境为 …

码上进阶_刷题模块测试_用例设计

码上进阶_刷题模块测试_用例设计 系统概述&#xff1a; 码上进阶是为程序员专门打造的交流平台&#xff0c;采用主流的微服务框架和C端技术栈作为技术基础。在这个平台上&#xff0c;程序员 可以通过刷题、练习和模拟面试来提升自己的面试能力。 功能测试&#xff1a; 登录…

SpringBoot OAuth2自定义登陆/授权页

背景 5 月份的时候&#xff0c;我实践并整理了一篇博客&#xff1a;SpringBoot搭建OAuth2&#xff0c;该博客完成之后&#xff0c;很长一段时间里我都有种意犹未尽的感觉。诚然&#xff0c;我把OAuth2搭起来了&#xff0c;各种场景的用例也跑通了&#xff0c;甚至源码也看了&am…

99.WEB渗透测试-信息收集-网络空间搜索引擎shodan(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;98.WEB渗透测试-信息收集-Google语法&#xff08;12&#xff09; 信息收集方向-网络空间…

【IDEA配置一个maven项目(详细操作流程)】

目录 一、安装Maven 1、官网下载maven链接地址&#xff1a;Maven – Download Apache Maven 2、下载完成后&#xff0c;解压到某一路径下。E:\JavaTools\apache-maven-3.9.8为例&#xff0c;实际配置环境变量时以自己安装的路径为准。 二、配置环境变量 1、右键此电脑–&g…

springboot、flowable 生成图片发布到Docker乱码问题

flowable自带的方法生成图片时&#xff0c;如设置字体为宋体&#xff0c;则本地测试没有问题&#xff0c;因为windows自带宋体字体库&#xff0c;但是如果发布到Docker&#xff0c;则会出现乱码问题&#xff0c;因为大部分Docker并不包含宋体字体库&#xff1b; 通过Java代码&a…

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…

一个穷稳且病多的中年案例

调整 理性消费&#xff0c;量入为出 重视健康&#xff0c;提前规划 多元收入&#xff0c;提升自我 心态平和&#xff0c;知足常乐 提示&#xff1a;最后悔买“方”。 “方”和“車”对现金流的影响非常大。 全都是大额消耗性支出。 保持健康也需要物质基础。 为何收入或…

深度学习应用 - 自然语言处理(NLP)篇

序言 在信息技术的浩瀚星空中&#xff0c;深度学习犹如一颗璀璨的新星&#xff0c;正引领着人工智能领域的深刻变革。作为这一领域的核心分支&#xff0c;自然语言处理&#xff08; NLP \text{NLP} NLP&#xff09;更是借助深度学习的力量&#xff0c;实现了前所未有的飞跃。自…

BookStack在线文档管理系统本地Docker部署与远程访问详细教程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…