当前位置: 首页 > news >正文

【数据库系统概论】数据库完整性与触发器--复习

在数据库系统概论中,数据库完整性是指确保数据库中数据的准确性、一致性和有效性的一组规则和约束。数据库完整性主要包括实体完整性参照完整性用户定义完整性。以下是详细的复习内容:

1. 数据库完整性概述

数据库完整性是指一组规则,这些规则保证数据库中的数据是有效的、准确的,并且符合预定的要求。它通过一系列的完整性约束来控制数据的有效性和一致性。常见的完整性约束包括:

  • 实体完整性:确保每个实体在表中有唯一标识。
  • 参照完整性:确保表与表之间的引用关系有效。
  • 用户定义完整性:确保数据符合用户定义的特定规则。

2. 实体完整性

实体完整性确保每个关系表中的行(元组)可以通过某一列或一组列来唯一标识,通常使用主键来实现。(即每个关系表中必须要有一个主键,这里的主键可以是单个主键也可以是复合主键)

2.1 定义实体完整性

  • 实体完整性约束:一个关系中的每个元组必须有一个唯一标识符(主键),且主键的值不能为空(NOT NULL)。
  • 实体完整性通过主键来实现,主键中的每个属性都必须有唯一值,并且不能为空。
    ​
    --实体完整性定义的语法
    列名 类名数据类型 PRIMARY KEY,--将该列定义为主键(主码)​

    具体的定义实体完整性的实例代码:

  1. 列级完整性约束定义(即只有一个主码):

    -- 创建学生表,学号作为主键
    CREATE TABLE Students (Sno CHAR(20) PRIMARY KEY,-- Sno 主键约束,确保学号唯一且不为NULLSname CHAR(20) UNIQUE,--这里的UNIQUE是要保证学生名字不重复Sex CHAR(6),Smajor VARCHAR(40)
    );
    
  2. 表级完整性约束(即有多个候选码构成主码):

    -- 创建学生选课表,学号和课程号作为主键
    CREATE TABLE SC(Sno CHAR(8),Cno CHAR(5),Grade SMALLINT,Semester CHAR(5),Teachingclass CHAR(8),,PRIMARY KEY(Sno,Cno)  -- Sno,Cno主键约束,确保(学号,课程号)唯一且不为NULL
    );
    

2.2 实体完整性检查

  • 实体完整性检查是对主键约束的验证,确保插入或更新数据时,主键字段没有重复或空值。

2.3 实体完整性违约检查

  • 当插入的数据违反了主键约束,如主键字段为空或重复,数据库会拒绝插入操作,并返回错误信息。

SQL示例

-- 创建学生表,学号为主键
CREATE TABLE Students (StudentID INT PRIMARY KEY,  -- 主键约束StudentName VARCHAR(50),Age INT
);-- 插入数据(违反实体完整性约束,学号重复)
INSERT INTO Students (StudentID, StudentName, Age)
VALUES (1, 'Alice', 20);INSERT INTO Students (StudentID, StudentName, Age)
VALUES (1, 'Bob', 22);  -- 此操作会失败,因为StudentID=1跟上面那条插入语句里的StudenID重复了,如果这里改成VALUES (2, 'Bob', 22);的话可以成功插入

3. 参照完整性

参照完整性确保数据库表之间的外键关系有效,外键的值必须在被引用的表中存在。

3.1 定义参照完整性

  • 参照完整性约束:表中的外键列的值必须在被引用表的主键列中存在,或者外键列的值可以为NULL
    CREATE TABLE SC(Sno CHAR(8),Cno CHAR(5),Grade SMALLINT,Semester CHAR(5),Teachingclass CHAR(8),PRIMARY KEY(Sno,Cno),--定义表级完整性FOREIGN KEY(Sno) REFERENCES Student(Sno),--在表级定义参照完整性,Sno是外码,被参照表是StudentFOREIGN KEY(Cno) REFERENCES Course(Cno)--在表级定义参照完整性,Cno是外码,被参照表是Course
    );

3.2 参照完整性检查

  • 参照完整性检查的是外键字段的值是否在被引用的父表中存在,或者外键值是否为 NULL(如果外键字段允许为 NULL,则子表中可以有外键列的值为空(NULL)。这样可以确保表与表之间的引用关系是准确和一致的。

3.3 参照完整性违约检查

  • 插入:插入外键值时,必须检查外键值是否在引用表中存在。当向子表插入数据时,数据库会检查外键值是否在父表中存在。如果外键值不在父表的主键或唯一键列中,插入操作将会失败。
    -- 创建父表:Students
    CREATE TABLE Students (StudentID INT PRIMARY KEY,StudentName VARCHAR(50)
    );-- 创建子表:Enrollments,外键StudentID引用Students表中的StudentID
    CREATE TABLE Enrollments (EnrollmentID INT PRIMARY KEY,StudentID INT,CourseName VARCHAR(50),FOREIGN KEY (StudentID) REFERENCES Students(StudentID)  -- 外键约束
    );-- 向Students表插入数据
    INSERT INTO Students (StudentID, StudentName) 
    VALUES (1, 'Alice');-- 尝试向Enrollments表插入数据,插入有效的外键值
    INSERT INTO Enrollments (EnrollmentID, StudentID, CourseName)
    VALUES (1, 1, 'Math');  -- 成功,因为StudentID=1在Students表中存在-- 尝试向Enrollments表插入无效的外键值
    INSERT INTO Enrollments (EnrollmentID, StudentID, CourseName)
    VALUES (2, 2, 'Science');  -- 失败,因为StudentID=2在Students表中不存在
    
  • 删除:如果父表的某行数据被删除,且该行数据在子表中作为外键引用,数据库系统会阻止删除操作,除非使用级联删除(CASCADE DELETE)。在没有级联删除的情况下,父表中的记录不能被删除,因为它们在子表中有外键引用。使用 ON DELETE CASCADE 后,当删除父表中的记录时,相关的子表记录也会被自动删除。
    -- 尝试删除Students表中的学生数据
    DELETE FROM Students WHERE StudentID = 1;  -- 失败,因为该学生在Enrollments表中有外键引用-- 使用级联删除:删除学生时自动删除相关的注册记录
    CREATE TABLE Enrollments (EnrollmentID INT PRIMARY KEY,StudentID INT,CourseName VARCHAR(50),FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE CASCADE  -- 级联删除
    );-- 删除学生数据时,相关的注册记录也会自动删除
    DELETE FROM Students WHERE StudentID = 1;  -- 成功,相关的Enrollments记录也被删除
    
  • 更新:当更新父表中的主键值时,数据库会检查是否有子表中的外键引用该主键。如果有引用,数据库会阻止更新操作,除非使用了适当的级联更新(CASCADE UPDATE)操作。
-- 尝试更新父表中的主键
UPDATE Students SET StudentID = 2 WHERE StudentID = 1;  -- 失败,因为StudentID=1在Enrollments表中有外键引用-- 使用级联更新:更新父表主键时自动更新子表中的外键
CREATE TABLE Enrollments (EnrollmentID INT PRIMARY KEY,StudentID INT,CourseName VARCHAR(50),FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON UPDATE CASCADE  -- 级联更新
);-- 更新父表中的主键时,相关的子表记录中的外键会自动更新
UPDATE Students SET StudentID = 2 WHERE StudentID = 1;  -- 成功,Enrollments表中的外键也被更新

4. 用户定义完整性

用户定义的完整性是数据库中用户根据具体业务需求而设定的规则。这些规则是由数据库的使用者(比如开发者或者数据库管理员)根据实际需要来定义的,主要用来确保数据符合业务逻辑。

4.1 属性上的约束

属性约束是用来限制单个字段中的数据,比如限制字段的值范围或格式,确保数据符合预期。

4.1.1 范围约束(检查字段的值是否在特定范围内)

举个例子,假设我们要求员工的年龄必须大于等于18岁。我们可以在数据库中添加一个约束,确保年龄字段的值始终满足这个条件。

-- 创建员工表,确保年龄大于等于18岁
CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName VARCHAR(50),Age INT CHECK (Age >= 18)  -- 确保员工年龄 >= 18
);

这个约束确保插入的数据中,Age字段的值必须大于或等于18。如果你尝试插入18岁以下的员工,数据库会拒绝这个操作。 

4.1.2 格式约束(确保字段数据格式正确)

有时候,我们希望某个字段的数据符合特定的格式,比如,电子邮件必须符合标准格式。虽然 SQL 本身没有直接的正则表达式支持,但你可以用 CHECK 约束来大致确保格式正确。

-- 创建用户表,确保电子邮件格式正确
CREATE TABLE Users (UserID INT PRIMARY KEY,Email VARCHAR(100),CHECK (Email LIKE '%_@__%.__%')  -- 确保Email符合简单的邮箱格式
);

4.1.3 唯一性约束(确保字段数据唯一) 

有时候,我们希望某个字段的值在表中是唯一的,例如,确保每个用户的邮箱地址唯一。

-- 创建用户表,确保每个邮箱地址唯一
CREATE TABLE Users (UserID INT PRIMARY KEY,Email VARCHAR(100) UNIQUE  -- 确保邮箱地址唯一
);

4.2 元组上的约束

元组约束是对多列(多字段)数据的限制。通常用于确保某些字段的组合是唯一的或满足特定的条件。

4.2.1 组合唯一性约束(确保某些字段组合的值唯一)(组合唯一性约束也叫复合主键唯一性约束)

例如,假设你有一个“学生选课表”,每个学生可以选多门课程,但每个学生只能选一门课程一次。你可以使用组合主键来确保每个学生-课程的组合唯一。

-- 创建学生选课表,确保每个学生只能选修每门课程一次
CREATE TABLE StudentCourses (StudentID INT,CourseID INT,EnrollmentDate DATE,PRIMARY KEY (StudentID, CourseID),  -- 组合主键,确保每个学生每门课程只有一条记录FOREIGN KEY (StudentID) REFERENCES Students(StudentID),FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

在这个例子中,StudentIDCourseID 组成了一个复合主键,这确保了一个学生不能重复选同一门课程。 

5. 完整性约束命名句子

完整性约束的命名句子通常包括:

  • 主键约束PRIMARY KEY,确保数据行的唯一性。
  • 外键约束FOREIGN KEY,确保表之间的引用关系。
  • 检查约束CHECK,限制数据值的范围。
  • 唯一性约束UNIQUE,确保列中没有重复的值。

6. 触发器

触发器是数据库中一种特殊的对象,它可以在指定的事件发生时自动执行某些操作。换句话说,触发器是一种自动执行的数据库操作,它与某个表或视图关联,并且根据预定义的规则在插入(INSERT)、更新(UPDATE)删除(DELETE)等数据库操作发生时自动触发执行。

6.1 定义触发器

触发器是绑定到表上的一类对象,可以在INSERTUPDATEDELETE等操作前后触发,自动执行相应的操作。

6.2 触发器的应用场景

  • 自动审计:记录表中的数据变化。
  • 数据验证:在数据修改之前,检查数据是否符合规定的规则。
  • 级联操作:在删除父表记录时,自动删除子表中的相关记录(级联删除)。
  • 自动更新:当某一列数据更新时,自动更新其他相关字段。

6.3 触发器的类型

  1. BEFORE 触发器:在数据修改(插入、更新、删除)之前执行。
  2. AFTER 触发器:在数据修改(插入、更新、删除)之后执行。

6.4 创建触发器

触发器可以在数据插入、删除或更新时执行,如日志记录、自动更新其他表等。

CREATE TRIGGER trigger_name  -- 触发器名称
[BEFORE | AFTER] operation  -- 在操作前或后触发
ON table_name  -- 触发器关联的表
[FOR EACH ROW]  -- 针对每一行数据触发
BEGIN-- 触发器中执行的 SQL 操作
END;

6.5 删除触发器

删除触发器是在数据删除时触发的操作,通常用于执行相关的清理或审计任务。

DROP TRIGGER trigger_name;

6.6 实例:创建触发器

例子 1:插入数据时记录日志

假设我们有一个Employees表,用来记录员工信息。每次向Employees表插入数据时,我们希望自动将插入的数据记录到日志表InsertLog中。

步骤

  1. 创建Employees表。
  2. 创建InsertLog表,用来记录插入操作。
  3. 创建触发器,确保每次插入员工信息时,都会记录到日志表。
    -- 创建员工表
    CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName VARCHAR(50),Position VARCHAR(50)
    );-- 创建插入日志表
    CREATE TABLE InsertLog (LogID INT PRIMARY KEY IDENTITY(1,1),EmployeeID INT,LogDate DATETIME,Action VARCHAR(50)
    );-- 创建触发器,每次插入员工数据时自动记录到日志表
    CREATE TRIGGER LogInsert
    ON Employees
    AFTER INSERT  -- 插入数据后触发
    AS
    BEGIN-- 获取插入的员工ID,并记录到InsertLog表中DECLARE @EmployeeID INT;SELECT @EmployeeID = EmployeeID FROM INSERTED;  -- INSERTED是一个虚拟表,包含插入的数据INSERT INTO InsertLog (EmployeeID, LogDate, Action)VALUES (@EmployeeID, GETDATE(), 'INSERT');
    END;
    

解释

  • 当你向Employees表插入数据时,触发器LogInsert会被自动执行。
  • 触发器会从INSERTED虚拟表中获取新插入的EmployeeID,然后将这些信息插入到InsertLog表中,记录日志。
插入数据时触发器自动执行:
-- 向Employees表插入数据
INSERT INTO Employees (EmployeeID, EmployeeName, Position)
VALUES (1, 'Alice', 'Manager');

插入数据后,InsertLog表中会自动生成一条记录,记录该插入操作。


例子 2:删除员工时级联删除其相关数据

假设我们有一个Orders表,记录了员工的订单信息。我们希望在删除Employees表中的员工记录时,自动删除与该员工相关的订单记录。

-- 创建订单表
CREATE TABLE Orders (OrderID INT PRIMARY KEY,EmployeeID INT,OrderDate DATETIME,FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);-- 创建触发器,在删除员工时级联删除相关订单
CREATE TRIGGER CascadeDeleteOrders
ON Employees
AFTER DELETE  -- 在删除员工后触发
AS
BEGINDECLARE @EmployeeID INT;SELECT @EmployeeID = EmployeeID FROM DELETED;  -- DELETED是一个虚拟表,包含被删除的数据DELETE FROM Orders WHERE EmployeeID = @EmployeeID;
END;

解释

  • 这个触发器在删除Employees表中的员工记录时,会自动删除Orders表中与该员工相关的所有订单记录。
  • DELETED是一个虚拟表,包含已删除的记录。在触发器执行时,DELETED表中会包含被删除的员工信息。

相关文章:

【数据库系统概论】数据库完整性与触发器--复习

在数据库系统概论中,数据库完整性是指确保数据库中数据的准确性、一致性和有效性的一组规则和约束。数据库完整性主要包括实体完整性、参照完整性和用户定义完整性。以下是详细的复习内容: 1. 数据库完整性概述 数据库完整性是指一组规则,这…...

【YOLOv8模型网络结构图理解】

YOLOv8模型网络结构图理解 1 YOLOv8的yaml配置文件2 YOLOv8网络结构2.1 Conv2.2 C3与C2f2.3 SPPF2.4 Upsample2.5 Detect层 1 YOLOv8的yaml配置文件 YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨干(backbone)和头部…...

使用 commitlint 和 husky 检查提交描述是否符合规范要求

在上一小节中,我们了解了 Git hooks 的概念,那么接下来我们就使用 Git hooks 来去校验我们的提交信息。 要完成这么个目标,那么我们需要使用两个工具: 注意:npm 需要在 7.x 以上版本。 1. commitlint 用于检查提交信…...

QT集成IntelRealSense双目摄像头3,3D显示

前两篇文章,介绍了如何继承intel realsense相机和opengl。 这里介绍如何给深度数据和色彩数据一块显示到opengl里面。 首先,需要了解深度数据和彩色数据是如何存储的。先说彩色数据。彩色图像一般都是RGB,也就是每个像素有三个字节&#xf…...

Vue 中el-table-column 进行循环,页面没渲染成功

文章目录 前言效果图代码示例可能出现的问题及原因解决思路 前言 实现效果:el-table-column 进行循环,使之代码简化 遇到的问题: data进行默认赋值,操作列的删除都可以出来,其他表格里面的数据没出来 效果图 示例&am…...

渗透测试-非寻常漏洞案例

声明 本文章所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法. 此文章不允许未经授权转发至除先知社区以外的其它平台!&#xff0…...

Spring Boot 实战篇(四):实现用户登录与注册功能

目录 Spring Boot 实战篇(四):实现用户登录与注册功能 一、用户注册功能 (一)前端页面设计(简要提及) (二)后端实现 二、用户登录功能 (一)…...

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的,某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode,无效 3. 删除服务器上的~/.vscode-server 文件夹,无效 试过很多后,原来很可能是前一天anaconda卸载导致注册表项 步…...

openGauss与GaussDB系统架构对比

openGauss与GaussDB系统架构对比 系统架构对比openGauss架构GaussDB架构 GaussDB集群管理组件 系统架构对比 openGauss架构 openGauss是集中式数据库系统,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并…...

【ArcGISPro/GeoScenePro】检查并处理高程数据

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 数字高程模型 (DEM) 是一种栅格,可显示地面或地形的高程。 数字表面模型 (DSM) 是另一种高程栅格,可显示表面的高度,例如建筑物或树冠的顶部。 您需要准备 DEM 和 DSM 以供分析…...

WebRTC的三大线程

WebRTC中的三个主要线程: signaling_thread,信号线程:用于与应用层交互worker_thread,工作线程(最核心):负责内部逻辑处理network_thread,网络线程:负责网络数据包的收发…...

HTML-文本标签

历史上&#xff0c;网页的主要功能是文本展示。所以&#xff0c;HTML 提供了大量的文本处理标签。 1.<div> <div>是一个通用标签&#xff0c;表示一个区块&#xff08;division&#xff09;。它没有语义&#xff0c;如果网页需要一个块级元素容器&#xff0c;又没…...

C# 在PDF中添加和删除水印注释 (Watermark Annotation)

目录 使用工具 C# 在PDF文档中添加水印注释 C# 在PDF文档中删除水印注释 PDF中的水印注释是一种独特的注释类型&#xff0c;它通常以透明的文本或图片形式叠加在页面内容之上&#xff0c;为文档添加标识或信息提示。与传统的静态水印不同&#xff0c;水印注释并不会永久嵌入…...

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注&#xff1a;因为本人也是第一次接入广告与支付SDK相关的操作&#xff0c;网上也查了很多教程&#xff0c;很多也都是只言片语或者缺少一些关键步骤的说明&#xff0c;导致本人也是花了很多时间与精力踩了很多的坑才搞定&#xff0c;发出来也是希望能帮助到其他人在遇到相似问…...

docker部署项目

docker部署项目 &#xff08;加载tar包&#xff1a;docker image load -i mysql.tar&#xff09; 一、jdk环境配置 1.jdk下载地址 --Java Archive | Oracle 中国 --选择好版本进入 --下载Linux x64 Compressed Archive的链接 2.解压 --创建文件夹&#xff1a;mkdir /ro…...

C# 设计模式(创建型模式):工厂模式

C# 设计模式&#xff08;创建型模式&#xff09;&#xff1a;工厂模式 引言 在软件设计中&#xff0c;创建型模式是用来创建对象的设计模式&#xff0c;它们帮助我们将对象的创建过程从业务逻辑中分离出来&#xff0c;减少代码的重复性和耦合度。工厂模式作为创建型设计模式之…...

REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架

REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架 前言 提出这一模型的初衷为了应对大量计算资源和数据集出现伴随的知识产权问题。使用LLM合成类似人类的内容容易受到恶意利用,包括垃圾邮件和抄袭。 ChatGPT等大语言模型LLM的开发取得的进展标志着人机对话交互的范式…...

Lumos学习王佩丰Excel第二十三讲:Excel图表与PPT

一、双坐标柱形图的补充知识 1、主次坐标设置 2、主次坐标柱形避让&#xff08;通过增加两个系列&#xff0c;挤压使得两个柱形挨在一起&#xff09; 增加两个系列 将一个系列设置成主坐标轴&#xff0c;另一个设成次坐标轴 调整系列位置 二、饼图美化 1、饼图美化常见设置 …...

【Vue】v-if 和 :is 都是 Vue 中的指令,但它们用于不同的目的和场景

v-if v-if 是一个条件渲染指令&#xff0c;用于根据表达式的真假值来决定是否渲染一块内容。当 v-if 的表达式为真&#xff08;truthy&#xff09;时&#xff0c;Vue 会确保元素被渲染到 DOM 中&#xff1b;当表达式为假&#xff08;falsy&#xff09;时&#xff0c;元素不会被…...

private static final Logger log = LoggerFactory.getLogger()和@Slf4j的区别

一、代码方面 - private static final Logger log LoggerFactory.getLogger()方式 详细解释 这是一种传统的获取日志记录器&#xff08;Logger&#xff09;的方式。LoggerFactory是日志框架&#xff08;如 Log4j、Logback 等&#xff09;提供的工厂类&#xff0c;用于创建Lo…...

【项目】基于趋动云平台的Stable Diffusion开发

【项目】基于趋动云平台的Stable Diffusion开发 &#xff08;一&#xff09;登录趋动云&#xff08;二&#xff09;创建项目&#xff1a;&#xff08;三&#xff09;初始化开发环境&#xff1a;&#xff08;四&#xff09;运行代码&#xff08;五&#xff09;运行模型 &#xf…...

Git的.gitignore文件详解与常见用法

诸神缄默不语-个人CSDN博文目录 在日常使用 Git 进行版本控制时&#xff0c;我们经常会遇到一些不需要被提交到远程仓库的文件&#xff08;例如日志文件、临时配置文件、环境变量文件等&#xff09;。为了忽略这些文件的提交&#xff0c;Git 提供了一个非常有用的功能&#xf…...

客户端二维码优化居中和背景

原始 处理后...

Linux 安装运行gatk的教程

1.下载安装 wget https://github.com/broadinstitute/gatk/releases/download/4.1.8.1/gatk-4.1.8.1.zip2.解压 unzip *.zip3.查看 gatk --help 如下显示表示安装成功&#xff1a; 注意&#xff1a;仅限在该包所在位置的路径下能使用...

C++string类

1.为什么学习string类&#xff1f; 1.1C语言中的字符串 C语言中&#xff0c;字符串是以‘&#xff3c;0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OO…...

下载linux aarch64版本的htop

htop代码网站似乎没有编译好的各平台的包&#xff0c;而自己编译需要下载一些工具&#xff0c;比较麻烦。这里找到了快速下载和使用的方法&#xff0c;记录一下。 先在linux电脑上执行&#xff1a; mkdir htop_exe cd htop_exe apt download htop:arm64 # 会直接下载到当前目…...

MYSQL---------支持数据类型

数值类型 整数类型 TINYINT&#xff1a;通常用于存储小范围的整数&#xff0c;范围是-128到127或0到255&#xff08;无符号&#xff09;。例如&#xff0c;存储年龄可以使用TINYINT类型。示例&#xff1a;CREATE TABLE users (age TINYINT);SMALLINT&#xff1a;范围比TINYINT…...

黑马JavaWeb开发跟学(十四).SpringBootWeb原理

黑马JavaWeb开发跟学 十四.SpringBootWeb原理 SpingBoot原理1. 配置优先级2. Bean管理2.1 获取Bean2.2 Bean作用域2.3 第三方Bean 3. SpringBoot原理3.1 起步依赖3.2 自动配置3.2.1 概述3.2.2 常见方案3.2.2.1 概述3.2.2.2 方案一3.2.2.3 方案二 3.2.3 原理分析3.2.3.1 源码跟踪…...

迅为RK3568开发板编译Android12源码包-设置屏幕配置

在源码编译之前首先要确定自己想要使用的屏幕并修改源码&#xff0c;在编译镜像&#xff0c;烧写镜像。如下图所示&#xff1a; 第一步&#xff1a;确定要使用的屏幕种类&#xff0c;屏幕种类选择如下所示&#xff1a; iTOP-3568 开发板支持以下种类屏幕&#xff1a; 迅为 LV…...

Spring Boot 中 TypeExcludeFilter 的作用及使用示例

在Spring Boot应用程序中&#xff0c;TypeExcludeFilter 是一个用于过滤特定类型的组件&#xff0c;使之不被Spring容器自动扫描和注册为bean的工具。这在你想要排除某些类或类型&#xff08;如配置类、组件等&#xff09;而不希望它们参与Spring的自动装配时非常有用。 作用 …...

Prometheus 采集 JVM 数据

Prometheus 采集 JVM 数据通常通过集成 JMX Exporter&#xff08;Java Management Extensions Exporter&#xff09;实现。以下是完整的介绍和操作步骤&#xff1a; 1. 原理概述 JVM 数据采集依赖于 JMX&#xff08;Java Management Extensions&#xff09;&#xff0c;JVM 提…...

OpenNJet v3.2.0正式发布!

在这个版本中&#xff0c;NJet实现重大突破&#xff0c;提供了动态Upstream的能力。这是一个关键的特性&#xff0c;使得NJet可以按需动态管理上游服务器池&#xff0c;从而使得业务方可以按需配置资源池&#xff0c;实现业务分区、算法切换&#xff1b;结合动态路由技术&#…...

TinaCMS: 革命性的开源内容管理框架

在如今的数字时代&#xff0c;高效的内容管理系统&#xff08;CMS&#xff09;已成为构建内容丰富网站和应用程序的必需品。传统 CMS&#xff0c;如 WordPress 和 Drupal&#xff0c;功能丰富但复杂度高。而新一代 CMS&#xff0c;例如 TinaCMS&#xff0c;以其灵活性和开发者友…...

VuePress2配置unocss的闭坑指南

文章目录 1. 安装依赖&#xff1a;准备魔法材料2. 检查依赖版本一定要一致&#xff1a;确保魔法配方准确无误3. 新建uno.config.js&#xff1a;编写咒语书4. 配置config.js和client.js&#xff1a;完成仪式 1. 安装依赖&#xff1a;准备魔法材料 在开始我们的前端魔法之前&…...

SpringCloud(二)--SpringCloud服务注册与发现

一. 引言 ​ 前文简单介绍了SpringCloud的基本简介与特征&#xff0c;接下来介绍每个组成部分的功能以及经常使用的中间件。本文仅为学习所用&#xff0c;联系侵删。 二. SpringCloud概述 2.1 定义 ​ Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地利用了Spring…...

JavaVue-Get请求 数组参数(qs格式化前端数据)

前言 现在管理系统&#xff0c;像若依&#xff0c;表格查询一般会用Get请求&#xff0c;把页面的查询条件传递给后台。其中大部分页面会有日期时间范围查询这时候&#xff0c;为了解决请求参数中的数组文件&#xff0c;前台就会在请求前拦截参数中的日期数组数据&#xff0c;然…...

Java-多种方法实现多线程卖票

Java多线程卖票是一个经典的并发编程问题,它展示了如何在多个线程之间安全地共享和修改资 源。以下是几种实现方式: 使用synchronized关键字: 使用synchronized修饰符来同步方法或代码块,确保同一时刻只有一个线程可以访问临界区(即操 作共享资源的代码)。 使用Reen…...

LLVM防忘录

目录 Windows中源码编译LLVMWindows下编译LLVM Pass DLL Windows中源码编译LLVM 直接从llvm-project下载源码, 然后解压后用VS2022打开该目录, 然后利用VS的开发终端执行: cmake -S llvm -B build -G "Visual Studio 17 2022" -DLLVM_ENABLE_PROJECTSclang -DLLVM_…...

Elasticsearch:基础概念

一、什么是Elasticsearch Elasticsearch是基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用 Elasticsearch 可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch 是…...

【快速实践】类激活图(CAM,class activation map)可视化

类激活图可视化&#xff1a;有助于了解一张图像的哪一部分让卷积神经网络做出了最终的分类决策 对输入图像生成类激活热力图类激活热力图是与特定输出类别相关的二维分数网格&#xff1a;对任何输入图像的每个位置都要进行计算&#xff0c;它表示每个位置对该类别的重要程度 我…...

从零开始自搭SpringBoot项目 -- Qingluopay项目工程介绍

从零开始自搭项目 – QingLuoPay 一&#xff0c;为什么要从零开始自搭项目 首先在介绍这个项目之前先介绍一下我为什么要选择从零自搭项目&#xff0c;而不是跟着网上哪些视频等做项目。 之前的很长一段时间我也都是在网上找一些做项目的视频就包含黑马的&#xff08;神领物…...

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式&#xff08;可选&#xff09; 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…...

.NET框架用C#实现PDF转HTML

HTML作为一种开放标准的网页标记语言&#xff0c;具有跨平台、易于浏览和搜索引擎友好的特性&#xff0c;使得内容能够在多种设备上轻松访问并优化了在线分享与互动。通过将PDF文件转换为HTML格式&#xff0c;我们可以更方便地在浏览器中展示PDF文档内容&#xff0c;同时也更容…...

使用 httputils + chronicle-bytes 实现金融级 java rpc

1、认识 chronicle-bytes Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库&#xff0c;但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护&#xff0c;旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性…...

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-利用KOR框架实现结构化输出(七)

一、前言 目前,大语言模型已升级至Qwen2.5版本。无论是语言模型还是多模态模型,均在大规模多语言和多模态数据上进行预训练,并通过高质量数据进行后期微调以贴近人类偏好。在本篇学习中,将集成vllm实现模型推理加速,现在,我们赶紧跟上技术发展的脚步,去体验一下新版本模…...

利用大语言模型解决推理任务

利用大语言模型&#xff08;Large Language Models, LLMs&#xff09;来解决推理任务是目前人工智能领域中的一个重要研究方向。大语言模型&#xff0c;如GPT系列&#xff08;包括ChatGPT&#xff09;和BERT等&#xff0c;具有强大的自然语言理解和生成能力&#xff0c;已经能够…...

修复OpenLinkSaas客户端在使用AtomGit账号时页面崩溃

问题描述&#xff1a;当一个新的AtomGit用户登录OpenLinkSaas客户端后出现了页面崩溃。 从浏览器控制台来看&#xff0c;是gitNoticeList出现了null。 查看代码后发现是请求atomGit api是返回的一个null的列表 接下来我们加下保护性的代码&#xff0c;来兼容null或undefine的情…...

如何使用大语言模型进行事件抽取与关系抽取

诸神缄默不语-个人CSDN博文目录 文章目录 1. 什么是事件抽取与关系抽取&#xff1f;2. 示例&#xff1a;使用大语言模型进行事件抽取与关系抽取 1. 什么是事件抽取与关系抽取&#xff1f; 事件抽取是指从文本中识别出与某些“事件”相关的信息。这些事件通常包括动作、参与者、…...

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑&#xff1a; while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部&#xff0c;就是一个while死循环&#xff0c;只做两件事&#xff0c;从队列里Get取…...

Unity3D ILRuntime开发原则与接口绑定详解

引言 ILRuntime是一款基于C#的热更新框架&#xff0c;使用IL2CPP技术将C#代码转换成C代码&#xff0c;支持动态编译和执行代码&#xff0c;适用于Unity3D的所有平台&#xff0c;包括Android、iOS、Windows、Mac等。本文将详细介绍ILRuntime在Unity3D中的开发原则及接口绑定技术…...