12-表的约束

知识背景

表的约束,就是在表中的数据上加上约束,也被称为数据完整性约束。数据完整性约束的目的是为了不被规定的、不符合规范的数据进入数据库

在录入数据库或数据发生变化时,DBMS(数据库管理系统)会按照一定的约束条件对数据进行监测,是不符合规范的数据不能进入数据库,使数据库中存储的数据正确、有效、相容,确保存储的数据是正确的。

在表中有三大类完整性约束:实体完整性(entity integrity)、参照完整性(referential integrity)和用户定义的完整性(user-defined integrity)

"单列约束可以定义在列级或者表级,多列约束则必须定义在表级"这是什么意思呢?

单列约束:指定是设计涉及字段(列)的约束。这类约束可以在定义字段时直接指定(即列级),例如在创建表时直接为某个字段指定NOT NULL 或 UNIQUE约束,也可以在表级别定义,即在创建表之后单独为某个字段添加约束

多列约束:涉及两个或更多字段(列)的约束,这类约束必须在表级别定义,因为他们关联了多个字段,不能仅仅在单个字段级别进行定义,如最常见的复合主键(由多个列共同作为主键)和复合外键

实体完整性约束

实体完整性的定义

1、关系型数据库中每个元组应该是可区分的,是唯一的,使用这样的约束条件来保证实体完整性

2、实体完整性约束所对应的属性被称为表的主键(primary key),或者称为关系的主码

3、实体完整性约束可以定义在表中的一列或多列上

实体完整性的规则

1、实体完整性的规则基本都是针对于表而言的,一个基本表通常对应于现实世界的一个实体集

2、主键对应的列值在表中是非空的、唯一的

3、每个表中最多只能拥有一个主键

实体完整性约束创建语法

1、定义主键约束

CREATE TABLE table_name (column1 INT,column2 VARCHAR(255),...PRIMARY KEY (column1)					//使得column1被定义为主键
);

2、定义主键约束并且给主键约束命名

CREATE TABLE table_name (column1 INT,column2 VARCHAR(255),...CONSTRAINT constraint_name PRIMARY KEY (column1)				//定义column为主键,并使这个主键被命名为constraint_name
);

3、如果表已经存在,还可以手动增加主键约束

ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (column1);

参照完整性约束

参照完整性约束的定义

1、参照完整性就好像现实世界中实体与实体的依赖关系,比如鱼与水,水就是鱼的生存环境,这样的关系在数据中,表与表之间也是存在的

2、一个表的属性需要依赖于另一个表的属性,在数据库中被映射为一个表的字段与另一个表的某个字段相关联,使用这样的约束条件来保证参照完整性,例如,员工表和部门表,因为每一个入职的员工都必须要又对应的部门,当员工表中有一条员工数据是没有部门的,那么就说明这一条员工的数据是不合理的

3、 参照完整性约束对应的属性被称为表的外键(foreign key),或者被称为关系的外码

4、参照完整性约束可定义在表中的一列或者多列上

5、外键约束需要有主表和从表,如上述所说的例子,员工表就是从表,部门表就是主表(被参照的表)

参照完整性约束的规则

1、被参照的相对应列上必须被定义为主键约束或唯一约束,也就是说在主表上的被参照的字段必须被定义为主键约束或唯一约束

2、表的外键列可以取空值

参照完整性语法举例

设有两个表,分别为classes表和student表,其中classes表为主表,student表为从表,并且classes表的主键字段id被student_id字段给引用

CREATE TABLE classes (id INT PRIMARY KEY,					//被引用的字段必须被设置为主键约束或唯一约束name VARCHAR(255)
);
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(255),class_id INT,CONSTRAINT ID FOREIGN KEY (class_id) REFERENCES classes(id)      //是class表中di字段被当前正在创建的表的class_id字段所引用,并且被命名为ID	
);

如果表已经存在还可添加外键约束

ALTER TABLE students
ADD CONSTRAINT ID
FOREIGN KEY (class_id)
REFERENCES classes(id);

在进行参照完整性的过程当中,还可进行级联操作,有更新级联和删除级联,以下这个例子就是删除级联(以DELETE为关键字,更新的关键字即为UPDATE)

CREATE TABLE classes (id INT PRIMARY KEY,name VARCHAR(255)
);
CREATE TABLE students (id INT PRIMARY KEY REFERENCES classes ON DELETE RESTRICT/CASCADE/SETNULL, //进行删除级联name VARCHAR(255),class_id INT,CONSTRAINT ID FOREIGN KEY (class_id) REFERENCES classes(id)	
);

或是

CREATE TABLE classes (id INT PRIMARY KEY,name VARCHAR(255)
);
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(255),class_id INT,CONSTRAINT ID FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE RESTRICT/CASCADE/SETNULL
);
参数介绍
ON DELETE RESTRICT当在父表/主表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应的外键,如果有,则不允许删除
ON DELETE CASCADE当在父表/主表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有,则也级联地删除外键在子表(即包含外键的表)中的记录
ON DELETE SETNULL当在父表/主表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有,则将外键列设置为空值

用户定义的完整性约束

任何的关系型数据库都应该支持实体完整性和参照完整性,这是关系模型所要求的。除此之外,不同的关系型数据库系统根据其应用环境的不同,还需要一些特殊的约束条件。而用户定义的完整性约束就是针对某一具体关系数据库的约束条件

非空约束

概述:非空约束就是要求设置非空约束的列值不同为空值,使用NOT NULL关键字来设置

语法:

在下述的创建表的SQL语句中,"id integer NOT NULL"就是指定了t01表中id字段为非空约束

CREATE TABLE t01 (id integer NOT NULL,name text.score numeric);

唯一约束

概述:唯一约束需要保证设置唯一约束的列值是在整个列中是唯一的,但可以为空

语法:

“id integer UNQIUE”就是将id字段设置为唯一约束

CREATE TABLE t01(id integer UNQIUE,name text,score numeric);

check约束

概述:限制一个特定列中的值必须要满足一定的条件表达式,当插入数据是,DBMS将检查该数据是否满足check约束条件,当不满足时,将会拒绝这种操作

语法:

下述SQL语句中,"score numeric CHECK (score > 0)"的check约束为在插入或更新score的数据值必须大于0

CREATE TABLE t01(id integer,name text,score numeric CHECK (score > 0));

约束的控制状态

概述:

①enable/disable 对新增的数据进行检查/对新增的数据不进行检查

②validate/novalidate 对现有数据的约束检查/对现有数据的约束不检查

约束控制方法:

约束的控制方法都是,对现有的数据和对新增的数据各自执行一个策略,其中外严内峻是默认状态,如下图

image-20241117155834483

参数简介
enable+validate默认状态;对新插入的数据执行完整性约束检查,对表中现有的数据执行完整性约束检查
disable+novalidate对新插入的数据不执行完整性约束检查,对表中现有的数据不执行完整性约束检查
disable+validate对新插入的数据不执行完整性约束检查,对表中现有的数据执行完整性约束检查,不允许对表执行DML操作,即对数据进行增删查改等操作
enable+novalidate对新插入的数据执行完整性约束检查,对表中现有的数据不执行完整性约束检查

这里可能会问道,为什么在"disable+validate"的约束控制状态下,不能执行DML操作,也就是不能执行增删改等操作呢?

个人理解:我想是因为"disable+validate"这两个概念刚好起了冲突,①首先,disable是针对新增的数据进行检查。②其次,validate是针对表中已有的数据进行检查,③但是,当数据新增进来的时候,新增的数据在某一个时刻,有两种身份,即作为新增的数据,又是表中现有的数据,那么DBMS到底应不应该检查呢?所以这时就产生了矛盾,才会导致不允许执行DML操作

kimi解释:当DISABLEVALIDATE组合在一起时,由于DISABLE允许插入不符合约束条件的数据,而VALIDATE在数据变化时会检查约束条件,这会导致在插入数据时不会检查约束,但在后续的检查中发现数据不符合约束条件,从而产生矛盾和数据不一致的问题

延迟约束

1、概述:

KES支持延迟检测约束的功能,便于在数据迁移和应用数据批量导入时保证成功率和操作效率

2、deferrable(可延迟的)和not deferrable(不可延迟的),这两个选项控制了该约束是否能被延迟。一个不可延迟的约束将在每一次数据插入或修改后立刻被检查,可延迟的检查将被推迟到事务结束时进行

3、initially immediate(立即检查)和initially deferred(延迟检查),延迟判断规则,如果该定义约束时指定为initially immediate,那么它在每一次数据插入或修改后被检查,这是默认值。如果指定为intially immediate,那么它会在每一次数据插入或修改后被检查,这是默认值。如果指定为initially deferred,那么它只会在事务结束之后被检查

4、用户可以在事务中设置延迟约束的延迟属性

SET CONSTRAINTS {ALL | constraint_name[,...]} {DEFERRED | IMMEDIATE}

实验1:主键约束

t01表的结构如下图

image-20241117180905719

t02表的结构如下图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建表时定义主键约束

1、在列级定义主键约束

创建t01表,并在id列上创建主键约束

test=# create table t01(id integer primary key,name text,score numeric);

2、在表级定义主键约束

将刚刚创建的t01表删除(无论是否存在的方法),创建t01表,并在id列上创建主键约束

test=# drop table if exists t01;
test=# create table t01(id integer,name text,score numeric,constraint ID primary key(id));

修改表时增加主键约束

1、将刚刚创建的t01表删除(无论是否存在的方法)

test=# drop table if exists t01;

2、创建t01表

test=# create table t01(id integer,name text,socre numeric);

3、修改t01,为id列创建主键约束

test=# alter table t01 add constraint ID primary key(id);

验证主键约束

1、往t01表插入2条id相同的数据,将会产生报错

test=# insert INTO t01(id) values (100);
INSERT 0 1
test=# insert INTO t01(id) values (100);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实验2:外键约束

创建外键约束

1、在被参照表中创建主键约束

创建t01表,并在id列上定义主键约束,因为在外键约束的形成中,被参照表中的被引用字段需要是主键约束或唯一约束

test=# create table t01(id integer primary key,name text,score numeric);

2、在参照表中创建外键约束

创建t02表,并在no列上定义外键约束,引用t01表的id主键列

test=# create table t02(no integer,name text,constraint t02_fk foreign key (no) REFERENCES t01(id));

3、验证外键约束

往t01表插入1行数据

往t02表插入2行数据,其中1行数据违反外键约束

test=# insert INTO t01(id) values (100);
test=# insert INTO t02(no) values (100);
test=# insert INTO t02(no) values (200);

image-20241117185902873

外键约束级联控制

注:

①存在外键依赖时,不可直接对父表的主键列执行更新操作

②使用ON DELETE CASCADE 选项可以在删除父表元组时实现级联删除子表元组

③使用ON DELETE SET NULL 选项可以在删除父表元组时实现级联更新子表元组的外键列为空值

1、创建t02表,在no列上创建主键约束

test=# create table t02(no integer primary key,name text); 

2、创建t01表,在id列上创建外键约束,参照t02表的no列并设置为级联控制

test=# create table t01 (id integer,name text,score numeric,constraint t02_fk foreign key (id) references t02(no) on delete cascade);

3、往t02表中插入1条记录,往t01表中插入1条满足外键约束的记录

test=# insert INTO t02(no) values (100);
test=# insert INTO t01(id) values (100);

4、更新t02表的no字段,该操作会因存在外键关联导致更新主键列失败

test=# update t02 SET no = 200 where no = 100;

image-20241117190648328

5、删除t02表中的记录(因为子表中参照的外键设置为级联删除。所以可成功删除父表元组)

test=# delete from t02 where no=100;

6、查看t01表的记录

test=# select * from t01;id | name | score 
----+------+-------
(0 行记录)

实验3:非空约束

创建表时定义非空约束

1、创建t01表,并在id列上创建非空约束

test=# create table t01(id integer not null,name text,score numeric);

修改表时增加非空约束

1、修改t01表时,并在name列上创建非空约束

test=# alter table t01 alter COLUMN name set not null;

2、使用元命令查看t01表的结构信息

test=# \d t01数据表 "public.t01"栏位  |  类型   | 校对规则 |  可空的  | 预设 
-------+---------+----------+----------+------id    | integer |          | not null | name  | text    |          | not null | score | numeric |          |          | 

验证非空约束

1、往t01表中插入2条记录,其中1行数据违反非空约束

test=# insert INTO t01 values(100,'aaa',1);
test=# insert INTO t01 values(100,null,2);

image-20241117192408777

实验4:唯一约束

创建表时定义唯一约束

1、创建t01表,并在id列上创建唯一约束

test=# create table t01 (id integer unique,name text,score numeric);

修改表时增加唯一约束

1、修改t01表,并在name列上增加唯一约束

test=# alter table t01 add constraint un_t01 unique(name);

验证唯一约束

1、往t01表中插入2条记录,其中1行数据违反唯一约束

test=# insert INTO t01 values (100,'aaa',1);
test=# insert into t01 values (100.'aaa',2);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实验5:check约束

创建表时定义check约束

1、创建t01表,并在score列上创建check约束,要求score取值必须大于0

test=# create table t01(id integer,name text,score numeric check(score>0));

修改表时增加check约束

1、修改t01表,并在socre列上增加check约束,要求score取值必须小于100

test=# alter table t01 add constraint check_score_t01 check(id<100);

验证check约束

1、往t01表中插入2条记录,其中1行数据违反check约束

test=# insert INTO t01(id) values (99);
test=# insert INTO t01(id) values (100);

image-20241117194325449

实验6:约束的状态控制

enable+validate

1、创建测试表t01,并为id列定义check约束,要求id列值必须大于10

test=# create table t01(id integer,name text,score numeric,constraint T01_CK check(id>10));

2、插入一条无效的数据到t01表中(执行报错)

test=# insert INTO t01(id) values (9); 
错误:  关系 "t01" 的新列违反了检查约束 "t01_ck"
描述:  失败, 行包含(9, null, null).

3、通过数据字典表(dba_constraints)查看约束的信息(constraint_name,status,validated),数据字典表示t01表时,需要使用大写,即针对T01表进行查询,

test=# select constraint_name,status,validated from dba_constraints where table_name='T01';constraint_name | status | validated 
-----------------+--------+-----------T01_CK          | ENABLE | VALIDATED
(1 行记录)

image-20241117211301673

disable+novalidate

1、修改t01表的t01_ck约束为disable novalidate

test=# alter table t01 disable novalidate constraint t01_ck ;

2、插入一条无效的数据到t01表中(执行成功)

test=# insert INTO t01(id) values (9);
INSERT 0 1

3、插入一条有效的数据到t01表中(执行成功)

test=# insert INTO t01 (id) values (11);
INSERT 0 1

image-20241117212115854

4、通过数据字典表查看约束的信息

test=# select constraint_name,status,validated from dba_constraints where table_name='T01';constraint_name | status  |  validated  
-----------------+---------+-------------T01_CK          | DISABLE | NOVALIDATED
(1 行记录)

disable+validate

1、调整约束t01_ck为disable validate状态会产生报错(因为在上面的实验中我们插入了违规数据)

test=# alter table t01 disable validate constraint t01_ck ;
错误:  一些行违反了检查约束 "t01_ck"

2、删除违规数据

test=# delete from t01 where id =9;

3、调整约束t01_ck为disable validate状态成功

test=# alter table t01 disable validate constraint t01_ck ;
ALTER TABLE

4、对t01表执行DML操作,应该是执行失败的

test=# insert INTO t01(id) values(12);  
错误:  不对表 (t01) 进行插入/更新/删除,在禁用并验证约束 (t01_ck) 的情况下
test=# update t01 SET id=12 where id=11;
错误:  不对表 (t01) 进行插入/更新/删除,在禁用并验证约束 (t01_ck) 的情况下
test=# delete from t01 where id=11;     
错误:  不对表 (t01) 进行插入/更新/删除,在禁用并验证约束 (t01_ck) 的情况下

image-20241117214042517

5、通过数据字典查看约束的信息

test=# select constraint_name,status,validated from dba_constraints where table_name='T01';constraint_name | status  | validated 
-----------------+---------+-----------T01_CK          | DISABLE | VALIDATED
(1 行记录)

enable+novalidate

1、禁用约束t01_ck(即disable+novalidate),插入一条违反约束的记录到t01表中

test=# alter table t01 disable novalidate constraint t01_ck ;
ALTER TABLE
test=# insert INTO t01(id) values (9);
INSERT 0 1

2、调整约束t01_ck为enable novalidate状态,可以发现这是修改成功的,因为只会对新增的数据进行检查,而不会对已有的违规数据进行检查

test=# alter table t01 enable novalidate constraint t01_ck ;

3、插入一条违反约束的记录到t01表中,如果不出意外的话,应该是插入失败的,因为DBMS对新增的数据进行了检查,发现新增的数据是一条违规数据,随后就被拒绝了

test=# insert INTO t01(id) values (8);
错误:  关系 "t01" 的新列违反了检查约束 "t01_ck"
描述:  失败, 行包含(8, null, null).

4、插入一条正常的记录到t01表中,当然这是会成功的

test=# insert INTO t01(id) values(12); 
INSERT 0 1

实验7:延迟约束

创建延迟约束

1、创建测试表t01,并在id列上创建主键约束

test=# create table t01(id integer primary key,name text,score numeric);      

2、创建测试表t02,并未id列定义延迟外键约束,参照t01表的id列

test=# create table t02 (id int,name text,constraint t02_fk foreign key (id) references t01(id) initially deferred);

3、显式开启事务

test=# begin ;
BEGIN

4、往子表t02中插入一条数据,执行成功,因为当前开启的事务,而当前的延迟状态时deferrable(可延迟的),可延迟的检查将被推迟到事务结束时进行

test=# insert INTO t02 values (20,'a');

5、往父表t01中插入一条数据

test=# insert INTO t01 values (20,'a',1);

6、结束事务,自动提交成功

test=# end;

7、通过数据字典表查看约束的信息

test=# select constraint_name,deferred from user_constraints where table_name='T02';constraint_name | deferred 
-----------------+----------T02_FK          | DEFERRED
(1 行记录)

在事务中控制延迟约束

在事务中执行约束,可以使得我们原本在非延迟的环境下,进入事务后,改为延迟的环境,在进行数据的增删改,从而达到退出事务后,环境依然是而非延迟的环境。总之,在事务中控制延迟约束可以达到在非延迟的环境下,做到延迟的环境下事情,这一切都要归功于事务的强大性能

注:①、延迟约束只能在事务中使用。②提交事务时总会验证表中的数据是否满足约束,不满足时导致事务失败

1、修改t02表的t02_fk约束为非延迟

test=# alter table t02 alter CONSTRAINT t02_fk initially immediate;

2、开启事务,在事务中临时修改t02_fk约束为延迟约束

test=# begin ;        
BEGIN
test=# alter table t02 alter CONSTRAINT t02_fk initially deferred;

3、往子表t02中插入一条数据。执行成功,因为在事务的影响下,我们处在延迟约束的环境下的

test=# insert INTO t02 values (30,'abc'); 

4、往父表t02中插入一条数据

test=# insert INTO t01 values (30,'acac',8);

5、结束事务,自动提交成功

test=# end; 
COMMIT

使用约束时的注意事项

1、一张表只能有一个主键约束,其它非主键列可以结合使用唯一约束+非空约束来实现类似的功能

2、check约束的定义必须是一个条件表达式,表达式要有确定的结果,要么为true,要么为flase

3、我们将列的默认值定义也可以看作是一种定义在表上的约束,用于列的自动填充的缺省值。这句话的意思是,列的默认值其实也是一种约束,这个约束的作用是帮助列自动填充缺省值

4、定义外键约束的列可以与被参照的父表中的列拥有不同的名称,但列的数据类型必须要匹配。就是外键约束,参照表的参照字段与被参照表的被参照字段的数据类型必须要匹配

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

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

相关文章

美创科技入选2024数字政府解决方案提供商TOP100!

11月19日&#xff0c;国内专业咨询机构DBC德本咨询发布“2024数字政府解决方案提供商TOP100”榜单。美创科技凭借在政府数据安全领域多年的项目经验、技术优势与创新能力&#xff0c;入选收录。 作为专业数据安全产品与服务提供商&#xff0c;美创科技一直致力于为政府、金融、…

微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid

背景 有一些同学在实际开发中&#xff0c;会有通过微信的openid获取公众号的openid&#xff0c;或者其他内容&#xff0c;这几天正好在研究这个功能的实现&#xff08;已实现&#xff09;&#xff0c;现做思路上的简单分享&#xff0c;希望能对需要解决该问题的同学有所帮助&a…

SplatFormer: Point Transformer for Robust3D Gaussian Splatting 论文解读

目录 一、概述 二、相关工作 1、NVI新视角插值 2、稀疏视角重建 3、OOD-NVS 4、无约束重建下的正则化技术 5、基于学习的2D-to-3D模型 6、3D点云处理技术 三、SplatFormer 1、Point Transformer V3 2、特征解码器 3、损失函数 四、数据集 五、实验 一、概述 该论…

c++视频图像处理

打开视频或摄像头 打开指定视频 /*VideoCapture(const String &filename, apiPreference);filename:读取的视频或者图像序列的名称apiPreference&#xff1a;读取数据时设置的属性*/ VideoCapture video; //定义一个空的视频对象 video.open("H:/BaiduNetdiskDownlo…

前端三剑客(二):CSS

目录 1. CSS 基础 1.1 什么是 CSS 1.2 语法格式 1.3 引入方式 1.3.1 行内样式 1.3.2 内部样式 1.3.3 外部样式 1.4 CSS 编码规范 2. 选择器 2.1 标签选择器 2.2 id 选择器 2.3 class 选择器(类选择器) 2.4 复合选择器 2.5 通配符选择器 3. 常用 CSS 样式 3.1 c…

udp_socket

文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen关于inet_ntoa UDP服务器封装 系…

【LLM训练系列02】如何找到一个大模型Lora的target_modules

方法1&#xff1a;观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…

解!决!vscode!Path Intellisense 失效!不起作用问题!!

第一步&#xff1a;找到path Intellisense插件 点击设置 第二步&#xff1a;打开settings.json文件&#xff1a; 第三步&#xff1a;配置settings.json文件内容&#xff1a; "path-intellisense.mappings": {"": "${workspaceRoot}/src",&qu…

力扣 LeetCode 110. 平衡二叉树(Day8:二叉树)

解题思路&#xff1a; 等于 -1 时&#xff0c;直接 return -1 class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root) ! -1;}public int getHeight(TreeNode root) {if (root null) return 0;int leftDepth getHeight(root.left);if (leftDep…

ros2学习日记_241124_ros相关链接

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

【TEST】Apache JMeter + Influxdb + Grafana

介绍 使用Jmeter发起测试&#xff0c;测试结果存入Influxdb&#xff0c;Grafana展示你的测试结果。 环境 windows 10docker desktopJDK17 安装 Apache JMeter 访问官网&#xff08;Apache JMeter - Apache JMeter™&#xff09;下载JMeter&#xff08;目前最新版本5.6.3&a…

【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例

Tips&#xff1a;在两方场景下&#xff0c;设计的安全算法&#xff0c;如果存在信息不对等性&#xff0c;那么信息获得更多的一方可以有概率对另一方实施安全性攻击。 1. 拆分学习原理 本文介绍了一种适用于隐私计算场景的深度学习实现方案——拆分学习&#xff0c;又称分割…

汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术

一、汽车HiL测试的概念 硬件在环&#xff08;Hardware-in-the-Loop&#xff0c;简称HiL&#xff09;仿真测试&#xff0c;是模型基于设计&#xff08;Model-Based Design&#xff0c;简称MBD&#xff09;验证流程中的一个关键环节。该步骤至关重要&#xff0c;因为它整合了实际…

Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)

目录 响应式数据 ref reactive 事件绑定指令 v-on v-on 鼠标监听事件 v-on 键盘监听事件 v-on 简写形式 属性动态化指令 v-bind iuput标签动态属性绑定 img标签动态属性绑定 b标签动态属性绑定 v-bind 简写形式 条件渲染指令 v-if 遍历指令 v-for 遍历对象的值 遍历…

Redis 常用数据类型插入性能对比:循环插入 vs. 批量插入

Redis 是一款高性能的键值数据库&#xff0c;其支持多种数据类型&#xff08;String、Hash、List、Set、ZSet、Geo&#xff09;。在开发中&#xff0c;经常会遇到需要插入大量数据的场景。如果逐条插入&#xff0c;性能会显得较低&#xff0c;而采用 Pipeline 批量插入 能大幅提…

开源动态表单form-create-designer 扩展个性化配置的最佳实践教程

在开源低代码表单设计器 form-create-designer 的右侧配置面板里&#xff0c;field 映射规则为开发者提供了强大的工具去自定义和增强组件及表单配置的显示方式。通过这些规则&#xff0c;你可以简单而高效地调整配置项的展示&#xff0c;提升用户体验。 源码地址: Github | G…

Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化

一、背景 线上程序连接mongos超时&#xff0c;mongo监控显示连接数已使用100%。 java程序报错信息&#xff1a; org.mongodb.driver.connection: Closed connection [connectionId{localValue:1480}] to 192.168.10.16:3717 because there was a socket exception raised by…

深入浅出分布式缓存:原理与应用

文章目录 概述缓存分片算法1. Hash算法2. 一致性Hash算法3. 应用场景Redis集群方案1. Redis 集群方案原理2. Redis 集群方案的优势3. Java 代码示例:Redis 集群数据定位Redis 集群中的节点通信机制:Gossip 协议Redis 集群的节点通信:Gossip 协议Redis 集群的节点通信流程Red…

Loom篇之java虚拟线程那些事儿

我们在之前的文章中提到了java推出纤程的背景和原因。在近三十年来&#xff0c;Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行&#xff0c;并且由于 Java 是多线程的&#xff0c;因此多个执行线程会同时发生。线程是 Java 的并…

自然语言处理: RAG优化之Embedding模型选型重要依据:mteb/leaderboard榜

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor git地址&#xff1a;https://github.com/opendatalab/MinerU 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路…