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

【数据库系统概论】第5章 数据库完整性【!触发器】

目录

5.1数据库完整性概述

5.2 实体完整性

5.3 参照完整性

5.4 用户定义的完整性

属性上的约束

1. 列值非空(NOT NULL)

2. 列值唯一(UNIQUE)

3. 检查列值是否满足条件(CHECK)

元组上的约束

5.5 完整性约束命名子旬

*5.6 域的完整性限制(不需要上,故这没有内容)

5.7 触发器

5.7.1 定义与激活触发器

SQL SERVER (T-SQL)语法格式

after类 型触发器(for)

inserted表和deleted表

instead of类型触发器

5.7.2 修改与查看触发器

使用sp_rename命令重命名触发器

查看触发器

 禁用或启用触发器

变 量

5.7.3 删除触发器


5.1数据库完整性概述

数据库的完整性定义

数据的正确性

数据是符合现实世界语义,反映了当前的实际状况

数据的相容性

数据库同一对象在不同关系表中的数据是相同的

例如: 学生所选的课程必须是学校开设的课程学生所在的院系必须是学校已成立的院系等

数据的完整性 ·

防止数据库中存在不符合语义的数据,防止数据库中存在不正确的数据

防范对象:不合语义的、不正确的数据

数据的安全性

保护数据库防止恶意的破坏和非法的存取

防范对象:非法用户和非法操作

5.2 实体完整性

关系模型的实体完整性

CREATE TABLE中用PRIMARY KEY定义

单属性构成的码有两种说明方法

定义为级约束条件

CREATE TABLE Student (StudentID INT PRIMARY KEY,   -- 定义StudentID为主键Name VARCHAR(100),Age INT
);

定义为级约束条件

CREATE TABLE Student (StudentID INT,Name VARCHAR(100),Age INT,CONSTRAINT pk_StudentID PRIMARY KEY (StudentID)   -- 定义StudentID为主键
);

多个属性构成的码只有一种说明方法-----定义为级约束条件

插入或对主码列进行更新操作时,关系DBMS按照实体完整性规则自动进行检查。

检查主码值是否唯一,如果不唯一则拒绝插入或修改

检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

检查记录中主码值是否唯一的方法是进行全表扫描

全表扫描十分耗时

关系数据库管理系统一般都在主码上自动建立一个索引

5.3 参照完整性

在 CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
REFERENCES短语指明这些外码参照哪些表的主码

SC表中增加一个元组

SC表的Sno字段是外键,引用的是Student表中的主键Sno。如果你在SC表插入一个元组,并且这个Sno的值在Student表中找不到匹配的记录,就会违反外键约束,导致参照完整性破坏。

修改SC表中的一个元组

原本SC表中的Sno属性值在Student表中存在相应的记录,但你修改了SC表中的Sno属性,使得新的值在Student表中找不到匹配的记录,同样会破坏参照完整性。

从Student表中删除一个元组

Student表中删除了一条记录,而SC表中仍然存在引用这条记录的外键(Sno),那么SC表中这些记录的外键值就会变得无效,导致参照完整性被破坏。

修改Student表中一个元组的Sno属性

Student表中修改了某个元组的主键(Sno),而SC表中存在引用该主键的外键(Sno),则SC表中的外键值将失效,导致参照完整性破坏

(1) 拒绝执行 不允许该操作执行。该策略一般设置为默认策略

(2) 级联操作 当删除或修改被参照表(Student)的一个元组导致与参照表(SC)的不一致,则删除或修改参照表中的所有导致不一致的元组

(3)设置为空值 当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。


5.4 用户定义的完整性

针对某一具体应用的数据必须满足的语义要求

属性上的约束

属性上的约束(也叫列级约束)是应用于单个列的数据限制

1. 列值非空(NOT NULL)

NOT NULL 约束用于确保某个属性的值不能为 NULL。当列定义了 NOT NULL 约束时,必须为该列提供有效值,不能留空。

CREATE TABLE Student (StudentID INT NOT NULL,   -- StudentID不能为NULLName VARCHAR(100) NOT NULL,  -- Name不能为NULLAge INT
);

这个例子中,StudentIDName 字段都被约束为 NOT NULL,意味着它们不能存储空值。

2. 列值唯一(UNIQUE)

UNIQUE 约束用于确保某个列的每个值都是唯一的,即该列中的所有值都不能重复。

CREATE TABLE Student (StudentID INT NOT NULL,Name VARCHAR(100) NOT NULL,Email VARCHAR(100) UNIQUE,  -- Email列的值必须唯一Age INT
);

在这个例子中,Email 字段定义了 UNIQUE 约束,确保每个学生的电子邮件地址是唯一的。

3. 检查列值是否满足条件(CHECK)

CHECK 约束用于检查列的值是否满足指定的条件表达式。它可以用来限制列值的范围、格式或其他条件。

CREATE TABLE Student (StudentID INT NOT NULL,Name VARCHAR(100) NOT NULL,Age INT CHECK (Age >= 18),  -- 确保Age大于或等于18GPA DECIMAL CHECK (GPA BETWEEN 0 AND 4)  -- 确保GPA在0到4之间
);

在这个例子中,Age 列的值必须大于或等于18,GPA 列的值必须在0到4之间。

元组上的约束

元组上的约束(也叫表级约束)是对整个元组(行)进行约束,通常是对多列之间的关系进行限制。元组级的约束可以涉及多个属性,并且可以定义不同属性之间的相互约束。

CHECK 短语用于元组级约束【插入/修改】

CHECK 约束不仅可以用于单列,还可以用于多个列之间的逻辑约束,进行更复杂的验证。例如,限制两列之间的值关系,或者根据某些列的组合来制定条件。


5.5 完整性约束命名子旬

完整性约束的命名会使用 CONSTRAINT 子句,并且可以给每个约束指定一个名字

CONSTRAINT <完整性约束名> <完整性约束>
  • <完整性约束名> 是你为约束定义的名称,用于标识约束。

  • <完整性约束> 是实际的约束类型,比如 NOT NULLUNIQUE 等。

CREATE TABLE Employee (EmployeeID INT,Name VARCHAR(100),Age INT,Salary DECIMAL,Email VARCHAR(100),DepartmentID INT,-- 主键约束CONSTRAINT pk_employee PRIMARY KEY (EmployeeID),-- 唯一约束CONSTRAINT uq_email UNIQUE (Email),-- 外键约束CONSTRAINT fk_department FOREIGN KEY (DepartmentID) REFERENCES Department (DepartmentID),-- 检查约束CONSTRAINT chk_age CHECK (Age >= 18),CONSTRAINT chk_salary CHECK (Salary > 0),-- 非空约束CONSTRAINT nn_name NOT NULL (Name)
);

修改表中的完整性约束

  1. 删除约束:使用 ALTER TABLEDROP CONSTRAINT 删除表中的完整性约束(如 CHECKPRIMARY KEYFOREIGN KEY 等)。

  2. 添加约束:使用 ALTER TABLEADD CONSTRAINT 添加新的完整性约束。

  3. 修改约束:不同的数据库管理系统(DBMS)对修改约束的支持不同,有些 DBMS 允许直接修改约束,有些则需要删除原有约束并添加新的约束

ALTER TABLE <表名>
DROP CONSTRAINT <约束名>;
ALTER TABLE Student
ADD CONSTRAINT C4 CHECK (birthdate <= '2005-01-01');

*5.6 域的完整性限制(不需要上,故这没有内容)

思考:如何表达更具一般性的约束?例如限制选课人数。
断言功能CREATE ASSERTION

5.7 触发器

两张表有外键约束,问是否能更新学生表的学号 ?

Update student setSno='Y71814006where Sno='199912104'

默认处理是拒绝【可以在设置里更改-关系】

在这可以改成级联操作

两张表没有外键约束,如何做到级联更新?

Update student set Sno='Y71814006'

where Sno='2104'

Update score set Sno='Y71814006'

where Sno='2104'

一直这样写不方便

-- 创建触发器:更新学生表的学号信息后,成绩表的学号一起更新器
--定义触发器:
create trigger 级联更新
on tStud  -- 触发器作用于 tStud 表
for update  -- 仅在执行 UPDATE 操作时触发
asupdate tScoreset 学号 = (select 学号 from inserted)  -- 使用 inserted 表中的学号(更新后的学号)where 学号 = (select 学号 from deleted);  -- 使用 deleted 表中的学号(更新前的学号)-- 更新 tScore 表中与 tStud 表更新前学号相同的学号, 
-- 将其更新为 tStud 表中更新后的学号-- 激活触发器: 
Update tStud 
set 学号 = '2000102103'  -- 设置新学号
where 学号 = '1999102103';  -- 在学号为 '1999102103' 的记录中进行更新-- 该更新操作会触发 "级联更新" 触发器,自动更新 tScore 表中的学号

触发器(Trigger)

触发器是数据库中的一种特殊对象,允许在特定事件发生时自动执行一些操作。

通常是用户自定义的,并且是由事件驱动的。

数据库管理系统会在某些特定条件下自动激活触发器,执行一段预定义的操作或过程。

触发器特点:保存在数据库服务器中

触发器是定义在数据库中的对象。它们是存储在数据库服务器中的,因此一旦创建,它们会一直存在,直到被删除或修改。

触发器由数据库管理系统(DBMS)维护,无需每次操作时手动执行。

触发器的类型

按照触发事件的语言分类

DML触发器(Data Manipulation Language Trigger)

DML触发器是指那些在数据操作语句(如 insert、update 和delete)对数据表进行修改时自动触发的触发器。DML触发器主要用于监控和控制数据库中的数据修改操作

DDL触发器(Data Definition Language Trigger)

DDL触发器是指那些在对数据库对象(create、 alter和drop表、视图、索引、存储过程等)执行数据定义语言(DDL)操作时自动触发的触发器。DDL触发器通常用于数据库结构的监控和管理

5.7.1 定义与激活触发器

触发器又叫做事件-条件-动作(event-condition-action)规则  

当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执 行规则中的动作,否则不执行该动作。       触发器是一个能自动执行的特殊的存储过程

CREATE TRIGGER <触发器名>   {BEFORE | AFTER} <触发事件> ON <表名> REFERENCING NEW | OLD ROW AS <变量> FOR EACH {ROW | STATEMENT} [WHEN <触发条件>]<触发动作体>;

CREATE TRIGGER:用来定义一个新的触发器。

<触发器名>:指定触发器的名称。应唯一

触发器和它所作用的表必须处于同一数据库模式(schema)下,确保触发器在指定的表上能够执行。

BEFORE:触发器在触发事件发生之前执行。

AFTER:触发器在触发事件发生之后执行。

<触发事件>:触发事件通常是 INSERTUPDATEDELETE,指定触发器响应的操作类型。

BEFORE INSERT:在插入数据之前触发。

AFTER INSERT:在插入数据之后触发。

<表名>:指定触发器作用的表,触发器将会在该表的触发事件发生时被激活。

REFERENCING NEW | OLD ROW AS <变量>

NEW:指代被插入或更新后的新数据行。在 INSERTUPDATE 事件中使用。

OLD:指代被删除或更新之前的数据行。在 DELETEUPDATE 事件中使用。

<变量>:定义 NEWOLD 数据行的别名。这个别名可以在触发器体内引用。例如,你可以使用 NEW 来访问新插入的数据或更新后的数据,使用 OLD 来访问删除前或更新前的数据。

FOR EACH {ROW | STATEMENT}

【行级触发器ROW:表示触发器在每一行数据的变动时执行一次。如果是批量操作(例如更新多个行),那么触发器会为每一行数据分别执行

【语句级触发器】STATEMENT:表示触发器只在整个 SQL 语句执行时触发一次,而不是针对每一行。

WHEN <触发条件>:可选的触发条件,指定一个条件表达式,只有在该条件为 TRUE 时,触发器才会执行。这个条件表达式可以基于 NEWOLD 行中的列值,也可以是其他的逻辑表达式。

<触发动作体>:这是触发器执行的实际操作。可以包含任何合法的 SQL 语句,如更新其他表的数据、插入日志记录、发送通知等。

书上给的是标准sql【知道即可,SqlServer中不是这样,比这个简单】

SQL SERVER (T-SQL)语法格式

CREATE TRIGGER 触发器名
ON 数据表名
[WITH ENCRYPTION]
FOR | AFTER | INSTEAD OF [INSERT] [, UPDATE] [, DELETE]

WITH ENCRYPTION(可选):这部分是对触发器定义文本的加密。加密后,触发器的定义(包括触发器的 SQL 代码)不能直接查看。通常用于保护触发器的逻辑,防止未授权的访问和修改。并非所有数据库系统都支持此功能, SQL Server 支持这个选项

FOR | AFTER | INSTEAD OF:

FOR:触发器会在指定的触发事件之前执行(如 BEFORE)。

AFTER:触发器会在指定的触发事件之后执行(如 AFTER)。

INSTEAD OF:触发器会代替指定的触发事件执行。这意味着触发器的操作将代替正常的 INSERTUPDATEDELETE 操作,通常用于处理复杂的逻辑或实现视图更新。

INSERT:在数据插入时触发。

UPDATE:在数据更新时触发。

DELETE:在数据删除时触发

after类 型触发器(for)

后触发触发器

“触发事件”成功执行完毕后,“被触 发事件”执行的触发器

after (for)触发器“触发事件”和“被 触发事件”都执行

after类型的触发器只能创建在数据表上,而不能创建在视图上

一张数据表可以创建多个因同一触发操作而生成 的触发器(执行顺序随机

建立一个更新触发器,当更新学生表后,输出 “数据已完成修改”,并显示学生表信息。

Create trigger update_学生  on tStud 
after update 
as  
print '数据已完成修改' 
select * from tStud

inserted表和deleted表

是系统为每个触发器准备的临时表,存放于内存中 

inserteddeleted 不是数据库中的物理表,而是 临时表

  • inserted:存放 INSERT 操作时的插入数据。

  • deleted:存放 DELETEUPDATE 操作时被删除的或旧的记录数据。

inserted表和deleted表中的记录只能查看,不能修改, 当触发器执行完毕后,与之相关的临时表也随之删除

CREATE TRIGGER 级联删除
ON tStud
AFTER DELETE
AS-- 使用 deleted 表获取删除的学生信息DELETE FROM tScoreWHERE 学号 IN (SELECT 学号 FROM deleted)

没有单独的 updated

 UPDATE 操作 本质上是先执行一个 DELETE 操作再执行一个 INSERT 操作,所以触发器中会同时使用 deleted 表和 inserted 表来处理更新操作。 

 当一个 UPDATE 事件发生时:

  • deleted 存储的是更新前的旧数据(即更新之前的值)

  • inserted 存储的是更新后的新数据(即更新之后的值)

 练习:创建触发器,更新学生表的学号信息时,成绩表的学号 一起更新。

CREATE TRIGGER 级联更新
ON tStud
FOR UPDATE
ASUPDATE tScore-- 更新成绩表中的学号,使其与学生表中学号保持一致SET 学号 =(select 学号 from inserted)WHERE 学号 =(select 学号 from deleted)

instead of类型触发器

替换触发器

系统并不 执行“触发事件”的具体操作(比如insert、update或者 delete数据),而是直接执行“被触发事件”                                不会执行触发事件中的操作

可以定义在表上和视图上。对于每个触发操作(insert、update或delete)只能定义一个instead of类型触发器

CREATE TRIGGER 替代触发器
ON tStud
INSTEAD OF DELETE
ASPRINT '前面的触发事件中的删除没有执行';    -- 打印-- 显示删除操作涉及的记录(被删除的数据)SELECT * FROM deleted;-- 显示当前学生表中的所有数据SELECT * FROM tStud;DELETE FROM tStud WHERE 学号 = '993502235';

5.7.2 修改与查看触发器

使用sp_rename命令重命名触发器

sp_rename 'oldname', 'newname';

查看触发器

1. 使用 sp_helptrigger 存储过程查看触发器信息

sp_helptrigger [@tablename =] 'table'[, [@triggertype =] 'type'];

@tablename:要查看触发器的表名。如果你指定了表名,存储过程将显示该表上的所有触发器。

@triggertype:指定触发器的类型

EXEC sp_helptrigger 'tstud', 'INSERT';

查看 tstud 表上的 INSERT 类型触发器 

2. 使用系统存储过程sp_helptext查看触发器代码

sp_helptext 'trigger_name';

'trigger_name':指定触发器的名称,使用单引号括起来。

EXEC 是 SQL Server 中的一个命令,用于执行存储过程或动态 SQL 查询。它可以用来调用存储过程、执行 SQL 语句或执行其他批处理操作。

3. 使用系统存储过程sp_help查看触发器其他信息 

sp_help ‘trigger_name’

 禁用或启用触发器

ALTER TABLE 触发器所属表名称
{ENABLE|DISABLE}TRIGGER {ALL|触发器名称[,...n] }

 暂时禁用触发器Trig_stuDML的使用。

ALTER TABLE 学生 DISABLE TRIGGER Trig_stuDML

变 量

DECLARE @变量名 数据类型 [,...n]

@变量名:变量名,必须以 @ 开头。

数据类型:变量的数据类型,INTVARCHARDATE 等。可一次性声明多个变量,用逗号分隔

 局部变量在声明时并没有初始化,默认值为 NULL,即如果变量没有被赋值,它的值是 NULL。在 SQL Server 中,NULL 是一个特殊的值,表示“没有值”或“未知值”

局部变量可以使用 SETSELECT 语句为其赋值

SET @变量=表达式
SELECT @变量=表达式 [,…n]SELECT @name=‘刘伟’,@age=21
select语句不能同时完成赋值和查询两种操作,set一次只能赋值一个

局部变量的显示

语法格式为:
PRINT 表达式
SELECT 表达式 [,…n] 
实例3:显示@age、@name、@msg的值。
PRINT @name
PRINT @age
SELECT @name as 姓名, 年龄=@age, @msg 欢迎词

5.7.3 删除触发器

DROP TRIGGER <触发器名> ON <表名>;

触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除

相关文章:

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空&#xff08;NOT NULL&#xff09; 2. 列值唯一&#xff08;UNIQUE&#xff09; 3. 检查列值是否满足条件&#xff08;CHECK&#xff09; 元组上的约束 5.5 完…...

Linux中通过frp实现内网穿透

1、准备工作 准备一台公网服务器&#xff08;云服务器&#xff09;&#xff0c;推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址&#xff1a;Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...

Vscode辅助编码AI神器continue插件

案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…...

LeetCode 3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口

【LetMeFly】3297.统计重新排列后包含另一个字符串的子字符串数目 I&#xff1a;滑动窗口 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-substrings-that-can-be-rearranged-to-contain-a-string-i/ 给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新…...

ssm旅游攻略网站设计+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …...

前端学习-环境this对象以及回调函数(二十七)

目录 前言 目标 环境对象 作用 环境对象this是什么&#xff1f; 判断this指向的粗略规则是什么&#xff1f; 回调函数 目标 常见的使用场景 综合案例&#xff1a;Tab任务栏切换 总结 前言 男儿何不带吴钩&#xff0c;收取关山五十州 目标 能够分析判断函数运行在不…...

计算机网络-数据链路层(虚拟局域网VLAN)

2.6 虚拟局域 2.6.1 虚拟局域网概述 以太网交换机连接的各个网络同属于一个广播域&#xff0c;随着以太网的规模扩大&#xff0c;广播域也会相应的扩大&#xff0c;巨大的广播域会带来巨大的弊端。 广播风暴 难以治理 潜在的安全问题 TCP/IP协议下会进行广播的协议&#xff1a…...

Python贪心

贪心 贪心&#xff1a;把整体问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直至所有步骤结束&#xff1b;每个步骤不会影响后续步骤核心性质&#xff1a;每次采用局部最优&#xff0c;最终结果就是全局最优如果题目满足上述核心性质&#xf…...

CSS 盒模型

盒模型 CSS盒模型是网页布局的核心概念之一&#xff0c;它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范&#xff0c;每个HTML元素都被视为一个矩形盒子&#xff0c;这个盒子由以下四个部分组成&#xff1a; 内容区&#xff08;Content area&#xff…...

【linux】vi编辑文件及readonly文件修改读写权限方法

板端vi修改文件&#xff1a; 1、vi 文件路径 vi mnt/eol/config/oem_eol.xml2、按 i进入修改状态&#xff0c;此时可以修改配置文件 3、按 esc退出修改状态&#xff0c;并按"wq!保存 问题&#xff1a;readonly文件无法直接vi修改 方案&#xff1a; 1、mount -o remoun…...

Git使用笔记

Git 版本控制 一、Git 介绍二、Git 使用1. 安装及配置2. 使用方法3. Git 命令3. 历史版本回退4. 分支 (Branch) 三、远程仓库1. SSH公钥连接Gitee2. 推送到远程仓库 一、Git 介绍 常见版本控制软件&#xff1a;集中式&#xff08;CVS、SVN&#xff09;&#xff0c;分布式&#…...

mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)

⚠️ 有些网站的mermaid可能不完整&#xff0c;因此下面教程中可能有些语法是无效的。 &#x1f60a;亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具&#xff0c;它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)

3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称&#xff1b;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置&#xff1…...

vue3+ts+element-plus 输入框el-input设置背景颜色

普通情况&#xff1a; 组件内容&#xff1a; <el-input v-model"applyBasicInfo.outerApplyId"/> 样式设置&#xff1a; ::v-deep .el-input__wrapper {background-color: pink; }// 也可以这样设置 ::v-deep(.el-input__wrapper) {background-color: pink…...

python迷宫寻宝 第6关 安全策略

地图&#xff1a; 1、体力不足去找终点&#xff0c;体力足则原地不动 import api## 判断是否需要离场的函数 # 体力足返回False&#xff0c;体力不足返回True def should_leave():# 拿到我离终点的距离e_row api.get.exit(what"row")e_col api.get.exit(what"…...

【计算机网络】lab7 TCP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...

Monorepo设置:新手指南

Monorepo是一种项目代码管理方法&#xff0c;指在单个代码仓库中管理多个项目&#xff0c;有助于简化代码共享、版本控制、构建和部署的复杂性&#xff0c;并提供更好的可重用性和协作性。 简单理解&#xff1a;所有项目都在一个代码仓库中 &#x1f4e6;&#xff0c;但这并不意…...

HTTP 请求与响应的结构

一、引言 在当今数字化的时代&#xff0c;网络通信如同空气一般无处不在&#xff0c;而HTTP协议则是网络世界中最为重要的基石之一。当我们在浏览器中输入一个网址&#xff0c;轻松浏览网页、观看视频、下载文件或是进行在线购物等操作时&#xff0c;背后HTTP协议都在默默地发…...

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析&#xff1a; &#xff08;1&#xff09;总部和分部要求网络拓扑简单&#xff0c;方便维护&#xff0c;网络有扩展和冗余性&#xff1b; &#xff08;2&#xff09;总部分财务部&#xff0c;人事部&#xff0c;工程部&#xff0c;技术部&#xff0c;提供…...

Soildworks的学习【2025/1/12】

右键空白处&#xff0c;点击选项卡&#xff0c;即可看到所有已调用的选项卡&#xff1a; 点击机械小齿轮选项卡&#xff0c;选择文档属性&#xff0c;选择GB国标&#xff1a; 之后点击单位&#xff0c;选择MMGS毫米单位&#xff1a; 窗口右下角有MMGS&#xff0c;这里也可以选择…...

ORACLE-表空间和分区控制

--查询最后更新的统计信息时间 SELECT table_name, last_analyzed FROM dba_tables WHERE table_name 表名; --更新统计信息 -----按分区 BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname > XI_SF, -- 模式名称 tabname > 表名, -- 表名称 partnam…...

C# 与 Windows API 交互的“秘密武器”:结构体和联合体

一、引言 在 C# 的编程世界里&#xff0c;当我们想要深入挖掘 Windows 系统的底层功能&#xff0c;与 Windows API 打交道时&#xff0c;结构体和联合体就像是两把神奇的钥匙&#x1f511; 它们能够帮助我们精准地操控数据&#xff0c;实现一些高级且强大的功能。就好比搭建一…...

【数字化】华为-用变革的方法确保规划落地

导读&#xff1a;华为在数字化转型过程中&#xff0c;深刻认识到变革的必要性&#xff0c;并采用了一系列有效的方法确保转型规划的有效落地。华为认为&#xff0c;数字化转型不仅仅是技术层面的革新&#xff0c;更是企业运作模式、流程、组织、文化等深层次的变革。数字化转型…...

SpringData-Redis缓存

Spring Framework是领先的全堆栈Java/JEE应用程序框架。它提供了一个轻量级容器和一个通过使用依赖注入、AOP和可移植服务抽象实现的非侵入性编程模型。 NoSQL存储系统为传统RDBMS提供了一种横向可扩展性和速度的替代方案。就实现而言&#xff0c;键值存储代表NoSQL空间中最大…...

大语言模型兵马未动,数据准备粮草先行

​从OpenAI正式发布ChatGPT开始&#xff0c;大型语言模型&#xff08;LLM&#xff09;就变得风靡一时。对业界和吃瓜群众来说&#xff0c;这种技术最大的吸引力来自于理解、解释和生成人类语言的能力&#xff0c;毕竟这曾被认为是人类独有的技能。类似CoPilot这样的工具正在迅速…...

跳表和Mysql联合索引的最左原则和索引下推的优化

文章目录 跳表&#xff08;Skip List&#xff09;关键特性跳表的结构示意图跳表的查询效率为什么 MySQL 不使用跳表而使用 B 树&#xff1f;跳表的实际应用场景 总结 MySQL 联合索引的最左匹配原则最左匹配原则的规则示例&#xff1a;创建联合索引查询示例及索引使用情况设计联…...

Android切换语言不退出App

1.需求 实现用户选择语言&#xff08;未点击下一步&#xff09;&#xff0c;更新当前界面UI&#xff0c;点击下一步后&#xff0c;更新App的语言&#xff0c;并进行保存。 实现目标&#xff1a; 1.设置App的语言&#xff0c;本地进行保存 2.updateResources更新本地语言配置…...

Unity编程与游戏开发-编程与游戏开发的关系

游戏开发是一个复杂的多领域合作过程,涵盖了从创意构思到最终实现的多个方面。在这个过程中,技术、设计与美术三大核心要素相互交织,缺一不可。在游戏开发的过程中,Unity作为一款强大的跨平台游戏引擎,凭借其高效的开发工具和庞大的社区支持,成为了很多游戏开发者的首选工…...

【Git】问题汇总

在push的时候显示 protocol error: bad line length 8192 我在本地创建了一个gogs服务器&#xff0c;现在正在上传代码&#xff0c;但是出现了上述的这个问题。 解决方法 设置本地http.postBuffer&#xff08;待验证&#xff09; 方法一&#xff1a;全局配置 git config --g…...

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…...

修改sshd默认配置,提升安全

对于Linux服务器&#xff0c;特别是暴露在公网的服务器&#xff0c;会经常被人扫描、探测和攻击。包括通过ssh访问登录攻击。对此&#xff0c;对默认的sshd配置进行调整&#xff0c;提升安全。 下面以CentOS 7.9为例说明&#xff1a; 一、常见安全措施 以root用户编辑vim /e…...

formik 的使用

礼记有言&#xff1a;独学而无友&#xff0c;则孤陋而寡闻 让我们一起了解更多便捷方法&#xff0c;缩短开发时间去摸鱼&#xff0c;嘿嘿。 框架&#xff1a;react 在写表单的时候&#xff0c;我不太喜欢把验证写的很繁琐&#xff0c;这里讲介绍&#xff0c;验证表单的非常好用…...

【学习笔记】理解深度学习的基础:机器学习

1. 机器学习基础 1.1 机器学习的定义与重要性 定义&#xff1a;深度学习是机器学习的一种特定形式。为了深入理解深度学习&#xff0c;必须牢固掌握机器学习的基本原理。机器学习算法是一种能够从数据中学习的算法&#xff0c;通过经验E在任务T上提高性能度量P&#xff08;Mi…...

Docker 基础知识

背景 传统的linux的环境部署 命令多步骤多安装版本多使用docker的话,一个命令就可以全部搞定安装linux 之前安装过,所以直接使用的开罩进行复制的如果之前配置过静态地址,需要改成IPV4静态地址访问安装docker 参考连接:https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBk…...

pyqt鸟瞰

QApplication‌是Qt框架中的一个类&#xff0c;专门用于管理基于QWidget的图形用户界面&#xff08;GUI&#xff09;应用程序的控制流和主要设置。QApplication类继承自QGuiApplication&#xff0c;提供了许多与GUI相关的功能&#xff0c;如窗口系统集成、事件处理等。 QAppli…...

Linux syslog 运行机制

Busybox的syslogd认识与使用 syslogd 的基本工作原理&#xff1a; syslogd 是一个系统日志守护进程&#xff0c;它接收来自各种进程和系统服务的日志消息&#xff0c;并根据配置将这些消息存储到不同的日志文件中。 syslogd日志记录器由两个守护进程&#xff08;klogd&#x…...

ZYNQ初识10(zynq_7010)UART通信实验

基于bi站正点原子讲解视频&#xff1a; 系统框图&#xff08;基于串口的数据回环&#xff09;如下&#xff1a; 以下&#xff0c;是串口接收端的波形图&#xff0c;系统时钟和波特率时钟不同&#xff0c;为异步时钟&#xff0c;&#xff0c;需要先延时两拍&#xff0c;将时钟同…...

day38 tcp 并发 ,linux下的IO模型----IO多路复用

TCP 并发 由于tcp协议只能实现一对一的通信模式。为了实现一对多&#xff0c;有以下的的处理方式 1. 多进程 开销大 效率低 2. 多线程 创建线程需要耗时 3. 线程池 多线程模型创建线程耗时问题&#xff0c;提前创建 4. IO多路复用 在不创建进程和线程的前提下&#xff0c;对…...

el-date-picker 禁用一个月前、一个月后(当天之后)的时间 datetimerange

文章目录 功能需求今天是 2025-01-09示例1示例2 代码 Vue2 功能需求 时间范围选择器&#xff0c;最大时间选择尺度为一个月。 今天是 2025-01-09 示例1 选择 2025-01-02 日 禁用未来日期&#xff08;2025-01-09之后日期&#xff09; 禁用上月2号&#xff08;31日之前&#…...

ES6的高阶语法特性

一、模板字符串的高级用法 1.1.模板字符串的嵌套 模板字符串的嵌套允许在一个模板字符串内部再嵌入一个或多个模板字符串。这种嵌套结构在处理复杂数据结构或生成具有层级关系的文本时非常有用。 1. 嵌套示例 假设我们有一个包含多个对象的数组&#xff0c;每个对象都有名称、…...

数据在内存的存储

数据类型介绍 前面我们已经学习了基本的内置类型&#xff1a; char //字符数据类型 1字节 打印%c short //短整型 2字节 打印%hd int //整形 4字节 打印%d long long int //长整型 4/8字节 打印%ld l…...

【微服务】面试题 6、分布式事务

分布式事务面试题讲解 一、问题背景与解决方案概述 因微服务项目涉及远程调用可能引发分布式事务问题&#xff0c;需解决。主流解决方案有阿里 Seata 框架&#xff08;含 XA、AT、TCC 模式&#xff09;和 MQ。 二、Seata 框架关键角色 事务协调者&#xff08;TC&#xff09;&…...

VMware中Ubuntu如何连接网络?安排!

一、设置NAT模式 1、关闭Ubuntu虚拟机&#xff1a; 确保Ubuntu已经完全关机&#xff0c;而不是挂起或休眠状态。 2、编辑虚拟网络设置&#xff1a; 在VMware主界面点击“编辑”菜单&#xff0c;选择“虚拟网络编辑器”。 如果需要&#xff0c;选择VMnet8 (NAT模式)并点击“更改…...

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上&#xff0c;实例是别的同事搭建的。最近又又又想了解一下&#xff0c;而且已经盘了一些了&#xff0c;所以写写记录一下。因为这个事儿没太多的进度压力&#xff0c;索性写到哪儿算哪儿&#xff0c;只要是新了解到的…...

TCP封装数据帧

void *send_data(void *arg) //这是一个发送数据的线程 {int sockfd init_tcp_cli("192.168.0.148",50000) //传ip和port&#xff0c;port 50000是因为大概前五万都被其它服务所占用&#xff0c;50000后是私人ipif(sockfd < 0){return NULL;}unsigned char …...

基于Springboot+Vue的仓库管理系统

开发一个基于Spring Boot和Vue的仓库管理系统涉及到前端和后端的开发。本文呢&#xff0c;给出一个简单的开发步骤指南&#xff0c;用于指导初入的新手小白如何开始构建这样一个系统&#xff0c;如果**你想直接学习全部内容&#xff0c;可以直接拉到文末哦。** 开始之前呢给小…...

工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理

哈喽~这里是维小帮&#xff0c;提供多个场所的定位管理方案&#xff0c;如需获取工厂人员定位管理系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花 在上一篇文章中&#xff0c;我们初步探讨了工厂人员定位管理系统的需求背景以及定位方…...

机器学习特征重要性之feature_importances_属性与permutation_importance方法

一、feature_importances_属性 在机器学习中&#xff0c;分类和回归算法的 feature_importances_ 属性用于衡量每个特征对模型预测的重要性。这个属性通常在基于树的算法中使用&#xff0c;通过 feature_importances_ 属性&#xff0c;您可以了解哪些特征对模型的预测最为重要…...

Go学习:多重赋值与匿名变量

目录 1. 变量的多重赋值 1.1 基本语法格式 1.2 交换变量值 2. 匿名变量的使用 1. 变量的多重赋值 1.1 基本语法格式 go语言中&#xff0c;可以将多个赋值语句 合并成 一句&#xff0c;比如&#xff1a; a : 10 b : 20 c : 30//a,b,c三个变量的赋值语句可以…...