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

news2024/11/14 13:55:08

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.coloradmin.cn/o/2108500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动端设计规范:提升用户体验的核心要素

随着移动互联网的普及,移动端设计已成为用户体验的关键一环。设计师不仅需要考虑视觉美感,还必须确保设计符合用户操作习惯,提高用户的操作效率。本文将探讨移动端设计的核心规范,帮助设计师打造出既美观又实用的应用界面。 一、…

uniapp动态页面API

目录 uni.setNavigationBarTitle动态设置标题 uni.showNavigationBarLoading为标题添加加载动画与uni.hideNavigationBarLoading停止加载动画 ​编辑 uni.setNavigationBarColor用于设置导航栏的颜色,包括背景颜色和文字颜色。这对于自定义应用的主题和风格非常有…

高质量的小间距LED显示屏有什么表现

随着企业对宣传和品牌形象提升的需求日益增长,LED显示屏凭借其立体化宣传和低成本优势,逐渐成为企业宣传的重要工具。近年来,小间距LED显示屏在市场上逐渐普及,生产厂家和产品种类也不断增加。面对如此众多的选择,许多…

合法的数字货币有哪些类型

合法数字货币的类型 一、常见的合法数字货币类型 比特币(Bitcoin,BTC):作为世界上第一个数字货币,由中本聪在 2009 年创造。其特点包括去中心化、匿名性和安全性较高,市值较高。以太坊(Ethereu…

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示:基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注:本项目为学习完…

WPS中JS宏使用说明(持续优化...)

前言 好久没发文章了,今天闲来无事发篇文章找找之前的码字感觉。 正文 最近在写教案,发现之前的技术又可以派上用场了。就是JS,全称JavaScript,这个语言太强大了,我发现WPS里的宏现在默认就是JS。功能选项如下图&…

Android 打开 GBK项目如何设置成UTF-8

1.标题 今天打开一个eclipse老项目,编码格式为GBK,Android studio导入项目报错,本人想到一个方案就是批量修改文件格式从 GBK到 UTF-8,这样可以一键解决问题 2.开发脚本 使用前请备份代码 使用前请备份代码 使用前请备份代码…

关于paddleocr文字识别内存泄漏的问题

最近在写一个小项目,需要使用paddleocr进行文字识别,然后发现存在严重的内存泄漏,运行时间越长,cpu和内存的占用率就越高。很容易导致程序的崩溃。 代码的主要逻辑如下: import os import numpy as np from paddleocr…

深入理解GAN网络

Generative Adversarial Networks创造性地提出了对抗训练来代替人工指定的loss。之前的文章初步理解了一下,感觉还是不到位,在这里再稍微深入一点。 交叉熵cross entropy 鉴别器是GAN中重要的一部分,鉴别器和生成器交替训练的过程就是adver…

秒开WebView? Android性能优化全攻略

​ 大家好,我是程序员小羊! 前言: 秒开 WebView 是很多 Android 开发者追求的目标,尤其是在需要加载复杂网页内容或与 Web 进行频繁交互的应用中。然而,由于 WebView 的启动速度较慢且加载资源耗时较多,优化…

时间戳有什么重要作用

1 问题: 今天做前后端联调的时候,发现请求url路径后面跟了一段数据:“t1725537660463”,我蒙圈了,为什么是一段乱码 明明我的后端写了id这个参数,而且前端传给后端的参数只有这个7,那“ &#…

解决:使用Charles查看本机的ip地址

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍 ✍GitHub开源项目地址👉:https://github.com/cheinlu/groundhog-charging-syst…

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们,大家好!我是你们的老朋友鲸天科技千千,一直在这片互联网的热土上耕耘。相信你们对我都不会陌生,因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣,别忘了点个关注哦&#xf…

【C++ Primer Plus习题】11.6

问题: 解答: main.cpp #include <iostream> #include "Stonewt.h" using namespace std; const int SIZE 6;int main() {Stonewt stone_arr[SIZE] { 253.6,Stonewt(8,0.35),Stonewt(23,0) };double input;Stonewt eleven Stonewt(11, 0.0);Stonewt max st…

C++特殊类设计,

目录 ​编辑 一、不能拷贝的类 二、只能在栈上创建的类&#xff0c; 三、只能在堆上创建的类&#xff0c; 四、不能被继承的类&#xff0c; 五、只有一个对象的类 一、不能拷贝的类 c98&#xff1a;将拷贝构造和运算符重载私有化 C11&#xff1a;delete删除成员函数 /…

[数据集][目标检测]电梯内广告牌电动车检测数据集VOC+YOLO格式2787张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2787 标注数量(xml文件个数)&#xff1a;2787 标注数量(txt文件个数)&#xff1a;2787 标注…

2024-09-03升级问题记录:编译打包出错java.lang.OutOfMemoryError: GC overhead limit exceeded

Android工程升级&#xff0c;debug构建apk可以正常生成&#xff0c;但是release构建时出现以上错误。 按字面意思&#xff0c;GC回收时内存不够。 那么&#xff0c;解决方法&#xff1a; 在在项目根目录的gradle.properties中&#xff0c;注意不是Administrator\.gradle 的 …

linux中vim常用命令大全详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Vim 是 Linux 系统中功能强大的文本编辑器&#xff0c;广泛用于代码编辑和配置文件的编辑。以下是 Vim 常用命令的详细讲解&#xff0c;包括基本操作、文本编辑、查找与替换、窗口操作等。 一、Vim 基本操…

Epoll 用法

Epoll 监听 EPOLL_CTL_DEL EPOLL_CTL_ADD epoll_event event event.events event.data.fd

初识redis(String,Hash,List,Set,SortedSet)

认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化&#xff0c;Key/Value&#xff0c;Document&#xff0c;Draph 无关联的&#xff0c;非sql&#xff0c;BASE&#xff08;原子性&#xff0c;持久性&#xff0c;一致性&#xff0c;隔离性&#xff09; 认识r…