MySQL:关系模型的基本理论
系列文章目录
1.关系模型的基本概念
2.数据库的完整性
文章目录
- 系列文章目录
- 前言
- 一、关系模型的基本概念
- 1.基本术语:
- 2.关系的特征
- 二、数据库的完整性
- 1.常见用例:
- 2.三类完整性原则
- 3.MySQL提供的约束
- 三、触发器
- 1.触发器的定义
- 2.触发器的类型
- 3.触发器的应用场景
- 总结
前言
对于我们来说为什么要学习和了解关系模型的基本理论呢,我在一开始学习这点的时候就不是很清楚,不知道其重要性,但是学习关系模型对于数据库开发和设计是至关重要的,它提供了一个系统化和结构化的方式来组织,管理和访问数据,关系模型是基于集合论和逻辑推理的,通过关系(通常表现为表)来表达数据及其之间的关系。我们要明白数据之间的关系,相信很多毕业答辩的同学经常会被问到主键和外键和参照完整性原则,下面我们就来看看这到底是个怎么事!
一、关系模型的基本概念
1.基本术语
(1)关系:用于描述数据的一张二维表,组成表的行称为元组,组成表的列称为属性。例如学生信息表的关系模式为学生信息表(学号,姓名,性别,出生日期),则它包括4个属性。
(2)域:指列(或属性)的取值范围。例如,“学生信息表”中的性别列,该列的域为(男,女,NULL)。
(3)候选键(Candidate Key):也称为候选码。它能唯一地标识关系中每一个元组地最小属性集。一个关系可能有多个候选键,例如“学生信息表”,在没有重名的前提下,候选键有两个,分别是学号和姓名;如果有重名,但重名学生的性别不同,则候选键也有两个,分别是学号和性别+姓名。
举个例子:
假设有一个学生表,包含如下字段:
- 学号(Student_ID)
- 姓名(Name)
- 电话号码(Phone_Number)
在这种情况下:
- 学号可以唯一标识学生。
- 电话号码在理想情况下也是唯一的(假设每个学生的电话都不相同)。
- 学号+电话也可以唯一标识一个学生,但这并不是最小的标识符,因为如果学号就能唯一标识学生,电话号码就不是必须的。
因此,这个表有两个候选键:
- 学号(Student_ID)
- 电话号码(Phone_Number)
(4)主键:也称为主码。它是一个唯一识别关系中元组的最小属性集合。用户可以从关系的候选键中指定一个作为关系的主键。一个关系最多只能指定一个主键。作为主键的列不允许取NULL值,例如,在“学生信息表”中指定学号作为该关系的主键。
举个主键与候选键例子:
假设我们有一个名为“学生表”的数据库表,其中包含以下字段:
学号 (Student_ID) | 姓名 (Name) | 电话号码 (Phone_Number) |
---|---|---|
1001 | 张三 | 13800138000 |
1002 | 李四 | 13800138001 |
1003 | 王五 | 13800138002 |
在这个例子中,我们可以看到:
1. 候选键:
- 学号 (Student_ID):每个学生的学号都是唯一的,所以学号可以作为候选键。
- 电话号码 (Phone_Number):假设每个学生的电话号码也都是唯一的,那么电话号码也是一个候选键。
这两个字段都可以唯一标识表中的每一条记录,因此它们都是候选键。
2. 主键:
虽然表中有多个候选键,但只能选取其中一个作为主键。主键是用来唯一标识表中每一行数据的,且不能包含空值(NULL)。通常情况下,我们选择学号作为主键,因为:
- 学号通常是学生的唯一标识符,且它更具标识性。
- 电话号码虽然也是唯一的,但不太常用作标识符,而且电话号码可能发生变化(例如学生换号),而学号一般不会改变。
因此,学号 (Student_ID) 成为该表的主键。
最终结果:
学号 (Student_ID) | 姓名 (Name) | 电话号码 (Phone_Number) |
---|---|---|
1001 | 张三 | 13800138000 |
1002 | 李四 | 13800138001 |
1003 | 王五 | 13800138002 |
- 候选键:学号 (Student_ID),电话号码 (Phone_Number)
- 主键:学号 (Student_ID)
总结:
- 候选键:是可以唯一标识数据的字段,可以有多个。
- 主键:是从候选键中选出的一个,用来唯一标识表中的记录,并且主键的值不能为NULL。
(5)主属性:
主属性是指那些属于候选键或主键的属性。换句话说,主属性是用于唯一标识记录的字段中的一部分。
举例:
- 假设我们有一个“学生表”:
学号 (Student_ID) | 姓名 (Name) | 电话号码 (Phone_Number) |
---|---|---|
1001 | 张三 | 13800138000 |
1002 | 李四 | 13800138001 |
在这个表中,学号 (Student_ID) 和 电话号码 (Phone_Number) 都是候选键,可以唯一标识每个学生。假设我们将 学号 (Student_ID) 作为主键,那么 学号 就是一个主属性。
关键点:
- 主属性属于主键或者候选键。
- 它是用来唯一标识表中记录的字段。
(6)非主属性:
非主属性是指那些不属于候选键和主键的属性。也就是说,它们不能用于唯一标识记录,通常用于存储其他描述性的或附加的信息。
举例:
- 在上述表格中,姓名 (Name) 就是一个非主属性,因为它不用于唯一标识一个学生,多个学生可以有相同的姓名。
关键点:
- 非主属性不参与主键的选择,通常是一些描述性字段。
- 它们包含了与记录相关的额外信息,但不用于唯一标识该记录。
(7)全码:全码通常是指某个候选键的完整属性集合。当我们说一个候选键的全码时,我们指的是它包含的所有属性。
举例
假设有一个学生表(Students
):
学号 (Student_ID) | 姓名 (Name) | 手机号 (Phone_Number) |
---|---|---|
1001 | 张三 | 13800138000 |
1002 | 李四 | 13800138001 |
在这个表中:
- 学号 (Student_ID) 和 手机号 (Phone_Number) 都可以唯一标识学生,因此它们可以是候选键。
- 假设我们选 学号 (Student_ID) 作为主键,那么 学号 (Student_ID) 就是一个候选键的全码。
- 如果我们选择 学号 (Student_ID) 和 手机号 (Phone_Number) 的组合作为候选键,那么这两个属性的集合就是一个候选键的全码。
(8)外键:关系R中的某个属性K是另一个关系S中的主键,则称该属性K是关系R的外键。通过外键可以建立两表间的联系。
举例:
假设有两个表,一个是学生表(Students
),另一个是成绩表(Scores
)。
学生表(Students
):
学号 (Student_ID) | 姓名 (Name) |
---|---|
1001 | 张三 |
1002 | 李四 |
成绩表(Scores
):
成绩ID (Score_ID) | 学号 (Student_ID) | 课程 (Course) | 成绩 (Score) |
---|---|---|---|
1 | 1001 | 数学 | 95 |
2 | 1002 | 英语 | 88 |
在这个例子中,成绩表中的学号(Student_ID
)是一个外键,它引用了学生表中的学号(Student_ID
)主键。这个外键确保每条成绩记录都对应一个有效的学生。如果你试图在成绩表中插入一个不存在的学号(如 1003),数据库会拒绝插入,从而确保数据的一致性。
外键的实现:
在创建成绩表时,可以定义外键约束:
CREATE TABLE Scores (Score_ID INT PRIMARY KEY,Student_ID INT,Course VARCHAR(50),Score INT,FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID)
);
这里,FOREIGN KEY (Student_ID)
就是定义外键,它指向了学生表中的 Student_ID
字段。
2.关系的特征:
表是一个关系 ,表的行存储关于实体的数据,表的列存储关于这些实体的特征。在关系中,一列的所有取值具有相同的数据类型,每一列的名字是唯一的,在同一关系中没有两列具有相同的名字。
各列的顺序在理论上是无序的,即列的次序可以任意互换。
任意两个元组的候选码不能相同。
二、数据库完整性
1.常见用例:
数据库完整性是指数据的正确性和相容性,利用完整性约束,DBMS可帮助用户阻止非法数据的输入。
例如,学生的学号必须是唯一的;本科学生年龄的取值为14--50的整数;学生所选课程必须是学校开设的课程,学生所在院系必须是学校已成立的院系等。
2.三类完整性原则:
1.实体完整性原则:
实体完整性规则规定:每个关系中的每个元组(行)都必须有一个唯一的标识符,这个标识符通常是主键。主键的值不能为空,并且每个元组必须具有唯一的主键值。
规则要求:
- 每个表必须有一个主键(Primary Key)。
- 主键的值不能重复,每个元组都必须有一个唯一的主键。
- 主键值不能为空(不能为NULL)。
示例: 假设有一个“学生”表,包含学生的学号、姓名、年龄等信息。学号作为主键用于唯一标识每个学生:
学号 | 姓名 | 年龄 |
---|---|---|
20230001 | 张三 | 20 |
20230002 | 李四 | 21 |
20230003 | 王五 | 22 |
在这个例子中,“学号”是主键,它必须是唯一的,不能有重复值。比如,两个学生不能有相同的学号。同时,“学号”字段的值不能为NULL,因为一个学生必须有一个有效的学号。
2.参照完整性原则:
参照完整性规则要求:一个表中的外键(Foreign Key)必须在另一个表中有对应的主键值。外键用于建立不同表之间的关系,并确保数据的一致性和有效性。
规则要求:
- 外键指向的值必须存在于主键所在的表中。
- 外键的值可以是NULL(如果允许),但不能随意删除或更改指向的主键值。
示例: 假设有两个表:“学生”表和“选课”表:
- 学生表:
学号 | 姓名 | 年龄 |
---|---|---|
20230001 | 张三 | 20 |
20230002 | 李四 | 21 |
20230003 | 王五 | 22 |
- 选课表:
课程编号 | 学号 | 课程名称 |
---|---|---|
001 | 20230001 | 数据库课程 |
002 | 20230002 | 操作系统课程 |
003 | 20230001 | 计算机网络 |
在选课表中,“学号”是外键,指向学生表中的“学号”。参照完整性规则要求,“选课”表中的“学号”必须在“学生”表中存在。如果学生表没有学号为20230001的记录,那么选课表中也不能出现该学号。
如果你试图删除学生表中学号为20230001的记录,系统会阻止你删除,除非先删除选课表中相关记录(这可以通过外键约束设置为级联删除)。
定义:设F是关系R的一个或一组属性(但F不是R的主键),K是关系S的主键。如果K与F相对应,则称F是关系R的外键,并称关系R为参照关系,关系S为被参照关系。关系R和关系S可以是同一个关系。
规则:外键或者取空值(要求外键的每个属性均为空值),或者等于被参照关系中的主键的某个值。
3.用户定义完整性规则:
每个字段的值必须来自于一个有效的域(数据类型和值的范围)。域完整性保证了数据的类型、格式和范围的正确性,避免了无效或不合理的数据输入。
规则要求:
- 每个属性必须定义数据类型(如整型、字符型、日期型等),且只能接受该数据类型范围内的值。
- 可以设定一些额外的约束条件,如值的范围、格式等。
示例: 假设有一个“员工”表,其中包含“员工ID”、“姓名”和“工资”字段:
员工ID | 姓名 | 工资 |
---|---|---|
1001 | 张三 | 5000 |
1002 | 李四 | 6000 |
1003 | 王五 | 7000 |
对于“工资”字段,用户定义完整性规则要求:
- “工资”字段的类型应为数字,且值应该大于等于0。
- 不能输入负数或非数字字符。如果用户试图插入一个负数或字符串作为工资,数据库会拒绝该操作。
如果我们为“工资”设置一个范围约束,例如“工资必须大于等于3000”,则任何工资低于3000的记录都会违反用户定义完整性规则。
3.MySQL提供的约束:
1.主键约束
必须满足的条件:(1)值唯一(2)不能为空值。
若指定了表中的主键约束,也指定了该表的主键。一张表只能指定一个主键约束,因为一张表只能允许有一个主键。
主键约束分为列级和表级两种定义方式。列级针对表中的一列,而表级针对同一表中的一列或多列。
CREATE TABLE users (id INT PRIMARY KEY, -- 直接在列级定义主键name VARCHAR(100)
);
CREATE TABLE users (id INT,name VARCHAR(100),CONSTRAINT pk_no PRIMARY KEY (id) -- 在表级定义主键
);
修改主键约束示例:
删除主键约束:
ALTER TABLE employeeDROP PRIMARY KEY;
创建表后添加主键约束:
ALTER TABLE employeeADD CONSTRAINT pk_no PRIMARY KEY(empno);
2.唯一约束
唯一约束主要针对的是候选键,以保证候选键的值的完整性。
满足条件:值唯一 可有一个且仅有一个空值。 对于候选键,由于它是一种键,也能唯一地识别关系中的每一个元组,但其中只能有一个作为主键,该主键可用主键约束来保证其值的完整,其他的候选键也应有相应的约束来保证其值的唯一,这就是唯一约束。因此,表中的候选键可设定为唯一约束,反过来说,设定为唯一约束的属性或属性组就是该表的候选键。一张表可以指定多个唯一约束,因为一张表允许有多个候选键。
3.外键约束
外键约束涉及两个表,即主表和从表。从表是指外键所在的表,主表是指外键在另一张表中作为主键的表。
外键约束要求:被定义为外键的字段,其取值只能为主表中引用字段的值或NULL值。
1. 增操作(Insert)
当你向主表中插入一行数据时,如果从表中有外键引用该主键的列,插入操作不会立即影响从表,除非从表中已有相关数据。外键约束会确保从表的数据一致性。
2. 删操作(Delete)
如果你删除主表中的某一行数据,而从表中有外键列引用该主键,就会出现问题。根据外键约束的不同设置(ON DELETE CASCADE
、ON DELETE SET NULL
、ON DELETE RESTRICT
等),删除操作的影响会不同:
- ON DELETE CASCADE:当删除主表中的行时,从表中所有引用该主键的行也会被删除。
- ON DELETE SET NULL:当删除主表中的行时,从表中所有引用该主键的行会被设置为
NULL
。 - ON DELETE RESTRICT:如果从表中有相关数据,删除主表的行会失败。
3. 改操作(Update)
当你更新主表中的主键值时,从表中引用该主键的外键会受到影响。更新的行为会依据外键约束进行处理:
- ON UPDATE CASCADE:当主表的主键被更新时,从表中的外键值也会被更新。
- ON UPDATE SET NULL:当主表的主键被更新时,从表中的外键值会被设置为
NULL
。 - ON UPDATE RESTRICT:如果从表中有相关数据,更新主键值会失败。
举个例子:
-- 主表
CREATE TABLE orders (order_id INT PRIMARY KEY,customer_name VARCHAR(100)
);-- 从表
CREATE TABLE order_items (item_id INT PRIMARY KEY,order_id INT,product_name VARCHAR(100),FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE
);
删除主表中的数据
假设orders
表中有一条数据,order_id = 1
,并且order_items
表中有多个条目与该order_id
关联。如果我们删除orders
表中的order_id = 1
,由于外键的ON DELETE CASCADE
约束,从表order_items
中所有引用order_id = 1
的行都会被自动删除。
DELETE FROM orders WHERE order_id = 1;
更新主表中的主键值
假设orders
表中的order_id = 1
,并且我们希望更新该主键为order_id = 2
。如果外键约束是ON UPDATE CASCADE
,则在更新主表时,从表中所有引用order_id = 1
的外键值也会自动更新为order_id = 2
。
UPDATE orders SET order_id = 2 WHERE order_id = 1;
4.检查约束:
检查约束是通过检查输入表中的数据来维护用户定义的完整性的,及检查输入的每一个数据,只有符合条件的数据才允许输入表中。
在检查约束的表达式中,必须引用表中的一个或多个字段。检查约束也分为列级和表级两种定义方式。
CREATE TABLE employee(empno DECIMAL(2) Primary KEY,name varchar(8),age DECIMAL(3),phone VARCHAR(12) UNIQUE,CONSTRAINT age_CK CHECK(age>20 AND age<60)
);
三、触发器
1. 触发器的定义
触发器是一种特殊的存储过程,当对数据库表执行某些特定的操作(如插入、删除、更新)时,会自动执行。触发器通常用于对表中的数据进行自动检查、记录日志、更新其他表等。
2. 触发器的类型
触发器的类型可以根据触发的时机和事件的类型来分类:
-
触发时机:
- BEFORE 触发器:在执行数据库操作(如插入、更新、删除)之前触发。
- AFTER 触发器:在执行数据库操作后触发。
-
触发事件:
- INSERT:当对表执行插入操作时触发。
- UPDATE:当对表执行更新操作时触发。
- DELETE:当对表执行删除操作时触发。
-
触发器类型示例:
- INSERT 触发器:在插入数据时触发。
- UPDATE 触发器:在更新数据时触发。
- DELETE 触发器:在删除数据时触发。
3. 触发器的应用场景
- 自动更新日志:记录数据库的操作历史,如记录用户对表的插入、更新、删除操作。
- 数据验证:在数据插入或更新时验证数据的有效性或一致性。
- 数据同步:在某些情况下,触发器用于将数据同步到其他表或系统中。
- 维护数据完整性:确保数据的一致性和完整性,比如防止非法删除或更新。
示例代码:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
trigger_body;
典型样例:
-- 创建一个插入触发器
CREATE TRIGGER after_insert_order
AFTER INSERT ON orders
FOR EACH ROW
BEGIN-- 执行某些操作,例如插入日志或更新其他表INSERT INTO order_logs (order_id, log_message)VALUES (NEW.order_id, 'Order inserted successfully');
END;
删除:
DROP TRIGGER 触发器名
总结
这就是我今天要讲的内容,讲了关系模型的基本理论,包括基本术语呀,数据库的完整性呀,MySQL具体提供的约束呀,还有触发器,这些我感觉都是为后面自己做数据库打下坚实的基础,所以一定要加深理解,我会持续更新内容的,谢谢大家。
相关文章:
MySQL:关系模型的基本理论
系列文章目录 1.关系模型的基本概念 2.数据库的完整性 文章目录 系列文章目录前言一、关系模型的基本概念 1.基本术语: 2.关系的特征二、数据库的完整性 1.常见用例:2.三类完整性原则3.MySQL提供的约束 三、触发器 1.触发器的定义 2.…...
9.1 C#控制SW中零件的变色与闪烁
本文介绍:装配件中某零件隐藏与显示、零件的颜色修改。 探讨本话题的目的是为了实现如下目的:如果某个气缸报警,那么3D中该气缸红色并闪烁。 目前,当勾选部件1闪烁时,零件1-1将在显示与隐藏之间闪烁。 示例代码放到如下位置: C#与solidworks示例1-零部件的显示与隐藏资源…...
Spring Boot 跨域问题全解:原理、解决方案与最佳实践
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、跨域问题的本质 1.1 什么是跨域? 跨域(Cross-Origin)问题源于浏览器的同源策略(Same-Origin Policy&…...
C++学习之路,从0到精通的征途:继承
目录 一.继承的概念及定义 1.继承的概念 2.继承的定义 (1)继承的定义格式 (2)继承基类成员访问方式的变化 二.基类与派生类间的转换 1.派生类对象赋值给基类的引用/指针 2. 派生类对象直接赋值给基类对象 三.继承的作用域 四.派生类的默认成员函数 1.构造函数 2.拷…...
从零开始掌握FreeRTOS(2)链表之节点的定义
目录 节点 节点定义 节点实现 根节点 根节点定义 精简节点定义 根节点实现 在上篇文章,我们完成了 FreeRTOS 的移植。在创建任务之前,我们需要先了解FreeRTOS的运转机制。 FreeRTOS是一个多任务系统,由操作系统来管理执行每个任务。这些任务全都挂载到一个双向循…...
C 语言_常见排序算法全解析
排序算法是计算机科学中的基础内容,本文将介绍 C 语言中几种常见的排序算法,包括实现代码、时间复杂度分析、适用场景和详细解析。 一、冒泡排序(Bubble Sort) 基本思想:重复遍历数组,比较相邻元素,将较大元素交换到右侧。 代码实现: void bubbleSort(int arr[], i…...
LamaIndex rag(增强检索)入门
LamaIndex RAG 搭建 lamaindex rag 的简单是例 from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.core import Settings,SimpleDirectoryReader,VectorStoreIndex from llama_index.llms.huggingface import HuggingFaceLLM#初始化一个…...
七、深入 Hive DDL:管理表、分区与洞察元数据
作者:IvanCodes 日期:2025年5月13日 专栏:Hive教程 内容导航 一、表的 DDL 操作 (非创建)二、分区的 DDL 操作三、洞察元数据:SHOW 命令的威力结语:DDL 与 SHOW,Hive 管理的双翼练习题一、选择题二、代码题…...
SQLMesh信号机制详解:如何精准控制模型评估时机
SQLMesh的信号机制为数据工程师提供了更精细的模型评估控制能力。本文深入解析信号机制的工作原理,通过简单和高级示例展示如何自定义信号,并提供实用的使用技巧和测试方法,帮助读者优化数据管道的调度效率。 一、为什么需要信号机制…...
STM32 __main汇编分析
在STM32的启动流程中,__main是一个由编译器自动生成的C标准库函数,其汇编级调用逻辑可通过启动文件(如startup_stm32fxxx.s)观察到,但具体实现细节被封装在编译器的运行时库中。以下是其核心逻辑解析: 一、…...
Google Earth Engine(GEE) 代码详解:批量计算_年 NDVI 并导出(附 Landsat 8 数据处理全流程)
一、代码整体目标 基于 Landsat 8 卫星数据,批量计算 2013-2020 年研究区的 NDVI(归一化植被指数),实现去云处理、数据合成、可视化及批量导出为 GeoTIFF 格式,适用于植被动态监测、生态环境评估等场景。 二、代码分步解析(含核心原理与易错点) 1. 加载并显示研究区边…...
【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)
数据科学必备技能:填补缺失值(Imputing Missing Values) 在数据分析和机器学习项目中,缺失值(Missing Values) 是非常常见的问题。缺失的数据如果处理不当,会严重影响模型的训练效果࿰…...
c 中的哈希表
哈希是一种可以接受各种类型、大小的输入,输出一个固定长度整数的过程。你可以将哈希理解成一种特殊的映射,哈希映射,将一个理论无限的集合A映射到有限整数集合B上。 哈希函数:哈希函数是哈希过程的核心,它决定了哈希映…...
AI空域调度系统的社会角色与伦理边界
当AI空域调度系统成为城市运行不可或缺的一部分,其角色已不再是单纯的技术工具,而逐步具备了社会属性。平台既作为智能基础设施的调度中枢,也承担起数据治理、行为规训和公共资源分配等功能。本章聚焦AI调度系统的“类政府性”角色崛起&#…...
pringboot3+vue3融合项目实战-大事件文章管理系统-文章分类列表
GetMappingpublic Result <List<Category>>list(){List<Category> list categoryService.list();return Result.success(list);}然后在categoryservice接口新增 List list(); 然后再categoryserviceimpl实现类里面加入 Overridepublic List<Category&g…...
关于cleanRL Q-learning
内置变量 内置变量是由编程语言解释器或运行时环境预定义的变量。它们通常用于提供程序的元信息(如文件路径、模块名称)或控制程序行为。在 Python 中,内置变量通常以双下划线开头和结尾,例如 __file__、__name__。 以下是一些常…...
Electron-Vue3、Electron-React、Electron-Angular打造舆情监控系统项目
Electron是一个跨平台的桌面应用开发框架,可以让我们用html css js的技术开发跨平台桌面上可以安装的软件。视频详解: Electron教程 ElectronVue跨平台桌面软件开发教程-2024年更新(大地老师) 从Electron环境搭建开始到手把手教你调试、Elect…...
STM32 修炼手册
第一章 计算机体系结构(了解) 后续在板子上开发的时候,需要考虑是否有操作系统 方式一:有操作系统,通过c库通过os api操作硬件方式二:无操作系统, 通过c库通过固件库操作硬件 第二章 STM32开发板概述 板子/开发板&…...
React vs Vue:点击外部事件处理的对比与实现
React vs Vue:点击外部事件处理的对比与实现 在 Web 应用中,“点击外部事件监听”是一种常见需求,典型应用如:点击弹窗外部关闭弹窗、点击下拉菜单外关闭菜单。虽然在 React 和 Vue 中实现的原理类似——都是通过监听 document 的…...
rk3576--- HDMI CEC唤醒
文章目录 一、CEC唤醒的相关概念二、CEC唤醒实现(一)内核配置(二)设备树dts(三)驱动注册中断(四)休眠后开启MCU(五)验证 一、CEC唤醒的相关概念 CEC 是一种在…...
榕壹云搭子系统技术解析:基于Spring Boot+MySQL+UniApp的同城社交平台开发实践
一、引言 本文将分享一款基于Spring Boot、MySQL和UniApp开发的同城社交平台的技术实现细节,重点探讨其架构设计、核心功能及开发过程中的技术考量。该项目旨在为开发者提供可扩展的社交平台解决方案,支持快速二次开发与独立部署。 二、技术选型与架构设计 1. 技术栈概览 …...
Node.js事件循环中的FIFO原则
1. Node.js事件循环中的FIFO原则 Node.js的事件循环确实遵循先进先出(FIFO)原则,但这个原则的适用范围需要明确。具体来说: FIFO原则的适用范围:FIFO原则主要适用于每个阶段内部的任务队列,而不是跨越不同…...
基于javaweb的SpringBoot爱游旅行平台设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
服务器相关
虚拟机服务器搭建 virtualbox安装 下载地址:Downloads – Oracle VirtualBox centos镜像下载地址 centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 清华大学开源软件镜像站 | Tsinghua Open Source Mirror…...
Linux的文件查找与压缩
查找文件 find命令 # 命令:find 路径范围 选项1 选项1的值 \[选项2 选项2 的值…]# 作用:用于查找文档(其选项有55 个之多)# 选项:# -name:按照文档名称进行搜索(支持模糊搜索,\* &…...
Q1财报持续向好,腾讯音乐如何在不确定中寻找确定性?
最近一段时间,各家上市公司的财报都备受关注,腾讯音乐娱乐集团作为文娱类的头部企业也是备受市场关注的,今日腾讯音乐第一季度财报已公布,业绩持续向好。在这个不确定性的大环境下,腾讯音乐是如何寻找自己的确定性的&a…...
window 显示驱动开发-报告图形内存(一)
计算图形内存 在 VidMm 能够向客户端报告准确的帐户之前,它必须首先计算图形内存的总量。 VidMm 使用以下内存类型和公式来计算图形内存: 系统总内存 此值是操作系统可访问的系统内存总量。 BIOS 分配的内存不会出现在此数字中。 例如,一台…...
DELL R770 服务器,更换RAID卡教程!
今天的任务,是帮客户的一台戴尔DELL PowerEdge R770 服务器,更换RAID卡(也可以称之为PERC模块、阵列卡、RAID控制器等)。 根据我的个传统习惯,依然是顺便做一个教程,分享给有需要的粉丝们。如果看完教程&am…...
【Java】网络编程(Socket)
网络编程 Socket 我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢?在应用层和传输层之间,则使用套接字Socket来进行分离 套接字就像是传输层为应用层开的一个小口,应用程…...
力扣-226.翻转二叉树
题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 class Solution { public:TreeNode *invertTree(TreeNode *root) {if (!root) {return NULL;}TreeNode *temp root->right;root->right root->left;root->left …...
数据结构——例题1
eg1:求解 S 1! 2! 3! ... n! #include<stdio.h> #include<stdlib.h>long sum(int n){long s 0,t,i,j;for(i1;i<n;i){t1;for(j1;j<i;j){t*j;}st;}return s; }int main(){int n;printf("请输入一个整数:");scanf("…...
INT202 Complexity of Algroithms 算法的复杂度 Pt.7 NP-Completeness NP完全性
文章目录 1.P与NP问题1.1 计算上难以解决的问题(Hard Computational Problems)1.2 决策问题和优化问题(Decision/Optimization problems)1.3 计算问题的正式定义1.4 复杂性类1.4.1 复杂性类 P P P1.4.2 证明(Certifica…...
K8s 图形界面管理kubesphere
1. 概述 KubeSphere 是一个开源的、基于 Kubernetes 的容器平台,旨在简化企业级 Kubernetes 集群的部署、管理和运维。KubeSphere 提供了丰富的功能,包括多租户管理、DevOps 流水线、应用商店、监控与日志、服务网格、网络策略等,帮助企业快…...
MCU程序加密保护(一)闪存读写保护法 加密与解密
MCU(微控制器单元)的加密方法可以从硬件、软件和通信协议三个层面来理解。以下是常见的MCU加密手段,按类型分类说明: 针对目前 STM32 系列微控制器在程序加密保护方面手段单一、保护效果有限的问题,本文介绍并分析了四…...
Windows下安装mysql8.0
一、下载安装离线安装包 (下载过了,可以跳过) 下载网站:MySQL :: Download MySQL Installerhttps://dev.mysql.com/downloads/installer/ 二、安装mysql 三、安装完成验证...
ubuntu----100,常用命令2
目录 文件与目录管理系统信息与管理用户与权限管理网络配置与管理软件包管理打包与压缩系统服务与任务调度硬件信息查看系统操作高级工具开发相关其他实用命令 在 Ubuntu 系统中,掌握常用命令可以大幅提升操作效率。以下是一些常用的命令,涵盖了文件管理…...
PYTHON训练营DAY24
# SO代码我们的感情好像跳楼机 # 元组创建时,可以省略括号:my_tuple4 10, 20, thirty # 字符串要加“ ” 元组 一、创建 my_tuple1 (1, 2, 3) my_tuple2 (a, b, c) my_tuple3 (1, hello, 3.14, [4, 5]) # 可以包含不同类型的元素 print(my_tupl…...
Element UI 双击事件(@cell-dblclick 与 @row-dblclick)
Element UI 双击事件(cell-dblclick 与 row-dblclick) 一、核心双击事件绑定 表格单元格双击 事件绑定: 通过 cell-dblclick 监听单元格双击,接收四个参数(row, column, cell, event)。 示…...
云原生|kubernetes|kubernetes的etcd集群备份策略
简介: 云原生|kubernetes|kubernetes的etcd集群备份策略 前言: etcd作为集群的关键组件之一,还是非常有必要进行定期备份的,本例将会就如何更快更好的备份etcd以及应该有哪些策略做一解析。(二进制部署的etcd集群&…...
永不收费的软件,离线可用
上次在推荐PC端证件照软件时,有小伙伴问是否有安卓端的版本。当时我说有,只是需要测试一下再给大家推荐。 今天就为大家带来一款安卓端的证件照软件,有需要的小伙伴可以赶紧收藏起来! 底色证件照(安卓) 之…...
解锁课程编辑器之独特风姿
(一)强大的编辑功能 课程编辑器的编辑功能堪称一绝,就像是一位全能的艺术大师。在文字编辑方面,它提供了丰富的字体、字号选择,还能对文字进行加粗、倾斜、下划线等格式设置,让重点知识一目了然。比如教师…...
在企业级智能体浪潮中,商业数据分析之王SAS或将王者归来
继LLM大模型与GenAI生成式AI应用之后,智能体正在成为下一个风口。与基于LLM的GenAI应用不同,智能体将LLM的智能涌现能力与智能决策的能力相结合,让智能体不仅能够认知、分析和总结,还能够进行决策和执行决策,将知识与智…...
WPF自定义控件开发全指南:多内容切换与动画集成
WPF自定义控件开发全指南:多内容切换与动画集成 一、控件基础架构设计1.1 选择控件基类1.2 定义关键属性 二、动画系统集成2.1 淡入淡出动画实现2.2 滑动动画实现 三、视觉状态管理四、完整使用示例4.1 XAML声明4.2 动画触发逻辑 五、扩展与优化5.1 性能优化建议5.2…...
二维差分(主要看原数组与差分数组的关系)
#include<stdio.h> #include<windows.h> int main() { int n, m; scanf("%d%d", &n, &m); int d[n 2][n 2]; // 差分数组 int a[n 2][n 2]; // 原数组 // 初始化数组 for (int i 0; i < n 1; i) { for (int j 0; j < n 1; j) { d…...
AI+企业应用级PPT生成(实战)
使用DeepSeek生成PPT框架Kimi PPT助手生成PPT全流程教学 目录 工具简介操作步骤 2.1 DeepSeek生成PPT框架2.2 Kimi PPT助手生成PPT 案例演示注意事项与优化建议扩展应用场景 1. 工具简介 DeepSeek:国内领先的AI大模型,擅长生成结构化文本内容ÿ…...
EXCEL Python 实现绘制柱状线型组合图和树状图(包含数据透视表)
1、组合图、数据透视表 (1)数据预处理 知识点 日期函数 year() month()数据透视表操作 同比计算公式 环比计算公式 (2)excel 数据透视表插入组合图 a.2015~2017数据集处理方式: 操作: 结果 b.2020~20…...
OpenCV的CUDA模块进行图像处理
本文介绍了使用OpenCV和CUDA加速的四种图像处理技术:灰度化、高斯模糊、Sobel边缘检测和直方图均衡化。每种技术都通过将图像数据上传到GPU,利用CUDA进行加速处理,最后将结果下载回CPU。灰度化通过cv::cuda::cvtColor实现,高斯模糊…...
电路研究9.3.5——合宙Air780EP中的AT开发指南:MQTT 应用指南
应用概述 4G 模块支持 MQTT 和 MQTT SSl 协议, MQTT 应用的基本流程如下: 1、如果要支持 SSL ,配置 SSL 参数 2、通过 TCP 连接到 MQTT 服务器 3、发送 MQTT CONNECT 到服务器,打开会话连接 4、订阅或者发布消息…...
每日算法刷题计划Day5 5.13:leetcode数组3道题,用时1h
11. 26. 删除有序数组中的重复项(简单,双指针) 26. 删除有序数组中的重复项 - 力扣(LeetCode) 思想: 1.我的思想: 双指针遍历集合储存已有元素 2.官方思想: 题目条件有序数组删除重复元素,所以重复元素都是连续存在…...
常见排序算法及复杂度分析
冒泡排序 (Bubble Sort) 基本思想 相邻元素比较,大的元素后移 每轮将最大元素"冒泡"到末尾 代码实现 void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) {for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {swap(arr[j]…...