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

数据库表约束完全指南:提升数据完整性和准确性

数据库表约束完全指南:提升数据完整性和准确性

在数据库设计中,表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法,包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约束。

1. 非空约束(NOT NULL)

1). 定义和目的

定义:非空约束(NOT NULL)是一种数据库表约束,它要求表中指定的列不能包含 NULL 值。

目的:非空约束的主要目的是确保数据库表中某些列总是包含有效的数据。这有助于防止数据缺失,确保数据的完整性,并且在查询和数据分析时提供更准确的结果。

2). 如何使用

非空约束可以在创建表时直接定义,也可以在表创建后通过修改表结构来添加。

创建表时定义 :

CREATE TABLE customers (customer_id INT NOT NULL,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL
);

在这个例子中,customer_idfirst_namelast_name 字段都被定义为非空字段。

修改表结构添加非空约束

如果表已经存在,你可以使用 ALTER TABLE 语句来添加非空约束:

ALTER TABLE customers
MODIFY first_name VARCHAR(50) NOT NULL;

这个例子将 first_name 字段修改为非空字段。

3). 影响和注意事项

数据插入:当非空约束应用于某个字段时,任何尝试插入 NULL 值到该字段的操作都会失败,数据库将返回错误。

数据更新:同样,任何尝试将非空字段更新为 NULL 的操作也会失败。

默认值:如果一个字段有默认值并且该字段没有非空约束,那么在插入记录时不指定该字段的值,数据库将使用默认值。但如果字段有非空约束,即使有默认值,也必须在插入记录时明确指定该字段的值。

性能:非空约束有助于数据库优化查询性能,因为数据库知道这些列总是包含数据,不需要额外的空值检查。

数据迁移和兼容性:在进行数据迁移或处理来自其他系统的数据显示时,非空约束有助于确保数据的一致性和兼容性。

4). 特殊情况

与其他约束结合使用:非空约束经常与其他约束(如唯一约束、主键约束等)结合使用,以进一步确保数据的唯一性和完整性。

空字符串与NULL:需要注意的是,非空约束防止的是 NULL 值,而不是空字符串('')。在某些情况下,空字符串可能被视为有效的数据,因此需要根据具体的业务逻辑来决定是否接受空字符串。

通过理解和正确使用非空约束,数据库设计者和开发者可以确保数据库中的数据更加可靠和可用,从而提高整个系统的稳定性和效率。

复制再试一次分享

2. 唯一约束(UNIQUE)

唯一约束(UNIQUE)是数据库表中用于确保列中的所有值都是唯一的约束。这意味着在任何给定的列或列组合中,不允许有重复的值。唯一约束通常用于标识那些在表中应该是独一无二的字段,如电子邮件地址、电话号码或任何用于区分记录的唯一标识符。

1). 定义和目的

定义:唯一约束保证表中某一列或列组合的值必须唯一,即在整个表中不会有两条记录在该列或列组合上有相同的值。

目的:其主要目的是保证数据的一致性和完整性,确保关键字段的值不会重复,从而避免数据混淆和错误。

2). 如何使用

唯一约束可以在创建表时定义,也可以在现有表上添加。

创建表时定义

CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255) UNIQUE,email VARCHAR(255) UNIQUE
);

在这个例子中,usernameemail 字段都被定义为唯一字段,这意味着任何尝试插入或更新为已存在的 usernameemail 的操作都会失败。

在现有表上添加唯一约束

如果表已经存在,可以使用 ALTER TABLE 语句来添加唯一约束:

ALTER TABLE users
ADD UNIQUE (username);

这个例子将 username 字段添加为唯一字段。

3). 影响和注意事项

数据插入和更新:唯一约束会阻止插入或更新操作产生重复的值。如果尝试插入或更新为已存在的值,数据库将返回错误。

索引:唯一约束通常会自动创建一个唯一索引,这有助于提高查询性能,因为数据库可以快速检查重复项。

空值(NULL):唯一约束列允许有空值(NULL),因为 NULL 不等于自身。因此,可以在唯一约束列中有多个 NULL 值。

性能:虽然唯一约束有助于保证数据完整性,但在大数据量下,它可能会影响插入和更新操作的性能,因为数据库需要检查新插入或更新的值是否唯一。

与其他约束结合使用:唯一约束可以与非空约束(NOT NULL)结合使用,以确保列不仅唯一,而且不能为 NULL

4). 特殊情况

复合唯一约束:可以在多个列上定义唯一约束,这称为复合唯一约束或组合唯一约束。

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,customer_id INT,product_id INT,quantity INT,UNIQUE (customer_id, product_id, quantity)
);

在这个例子中,customer_idproduct_idquantity 的组合必须是唯一的,即同一客户不能对同一产品下相同数量的订单。

删除和修改唯一约束:如果需要删除或修改唯一约束,可以使用 ALTER TABLE 语句。

ALTER TABLE users
DROP INDEX username;

这个例子删除了 username 字段上的唯一约束。

通过理解和正确使用唯一约束,数据库设计者和开发者可以确保关键数据的唯一性,从而提高数据的准确性和可靠性。

3. 主键约束(PRIMARY KEY)

主键约束(PRIMARY KEY)是数据库表中的一种特殊约束,用于标识表中的每一行记录。一个表的主键是该表中可以唯一标识每个记录的字段或字段组合。主键是数据库表结构的核心部分,对于数据完整性和表之间的关系至关重要。

1). 定义和目的

定义:主键约束是一个列或一组列,在数据库表中用于唯一标识每条记录。主键字段的值必须唯一,并且不能为 NULL

目的:主键的主要目的是确保表中的数据行的唯一性和完整性。它提供了一种可靠的方法来引用表中的数据,并且是建立表之间关系(外键)的基础。

2). 如何使用

主键约束可以在创建表时定义,也可以在现有表上修改添加。

创建表时定义

CREATE TABLE employees (employee_id INT NOT NULL,first_name VARCHAR(50),last_name VARCHAR(50),PRIMARY KEY (employee_id)
);

在这个例子中,employee_id 被定义为主键,这意味着 employee_id 的值必须是唯一的,并且不能为 NULL

在现有表上添加主键

如果表已经存在,可以使用 ALTER TABLE 语句来添加主键:

ALTER TABLE employees
ADD PRIMARY KEY (employee_id);

这个例子将 employee_id 字段添加为主键。

3). 影响和注意事项

唯一性和非空性:主键字段自动具有唯一(UNIQUE)和非空(NOT NULL)约束。这意味着你不能在主键列中插入重复的值或 NULL 值。

索引:大多数数据库管理系统会自动为主键创建一个唯一索引,这有助于提高检索效率。

性能:主键可以提高数据操作的性能,尤其是在执行联接(JOIN)操作时,因为主键的唯一性使得数据库能够快速定位和访问数据。

复合主键:可以在多个列上定义主键,这称为复合主键或多列主键。

CREATE TABLE orders (order_id INT,customer_id INT,order_date DATE,PRIMARY KEY (order_id, customer_id)
);

在这个例子中,order_idcustomer_id 的组合作为复合主键,确保了每个订单的唯一性。

删除和修改主键:主键一旦定义,就不能再直接删除或修改。如果需要更改主键,通常的做法是创建一个新表,将旧表的数据导入新表,并在新表上定义新的主键。

4). 特殊情况

自增主键:许多数据库管理系统支持自增主键(AUTO_INCREMENT),这是一种特殊的主键,其值在每次插入新记录时自动增加。

CREATE TABLE employees (employee_id INT NOT NULL AUTO_INCREMENT,first_name VARCHAR(50),last_name VARCHAR(50),PRIMARY KEY (employee_id)
);

在这个例子中,employee_id 是自增主键,每次插入新员工记录时,employee_id 的值会自动递增。

主键和外键关系:主键用于定义表内的数据完整性,同时也是定义表之间关系(外键约束)的基础。外键约束引用另一个表的主键,以保证引用的数据完整性。

通过理解和正确使用主键约束,数据库设计者和开发者可以确保数据的唯一性和完整性,提高数据操作的效率,并建立可靠的表间关系。

4. 外键约束(FOREIGN KEY)

外键约束(FOREIGN KEY)是数据库中用于建立两个表之间关联的一种约束。它确保了表中的数据与另一个表中的数据保持一致,从而维护了数据的引用完整性。外键约束是数据库规范化设计中的关键部分,用于避免孤立的数据和数据冗余。

1). 定义和目的

定义:外键约束是一个表中的一个或多个列,它们与另一个表的主键或唯一键相关联。外键约束确保引用表中的每个值必须在主表的主键或唯一键中存在。

目的:外键的主要目的是建立和维护两个表之间的链接,确保引用数据的完整性。它防止了在引用表中插入不存在于主表中的值,也防止了删除或更新主表中被引用的数据。

2). 如何使用

外键约束可以在创建表时定义,也可以在现有表上添加。

创建表时定义

CREATE TABLE orders (order_id INT NOT NULL,customer_id INT NOT NULL,order_date DATE,PRIMARY KEY (order_id),FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

在这个例子中,orders 表中的 customer_id 是一个外键,它引用了 customers 表中的 customer_id 主键。

在现有表上添加外键

如果表已经存在,可以使用 ALTER TABLE 语句来添加外键:

ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

这个例子将 orders 表的 customer_id 字段添加为外键,引用 customers 表的 customer_id 字段。

3). 影响和注意事项

级联操作:可以在外键约束中定义级联规则,如 ON DELETE CASCADEON UPDATE CASCADE,这意味着当主表中的记录被删除或更新时,引用表中相应的记录也会被级联删除或更新。

数据插入和更新:外键约束会阻止向引用列插入不存在于主键表中的值,也会阻止更新引用列的值,使其不再与主键表中的值匹配。

数据删除:外键约束会阻止删除主键表中被引用的记录,除非指定了级联删除或先删除引用表中的相关记录。

性能:外键约束可以影响数据库操作的性能,尤其是在涉及大量数据的插入和删除操作时,因为数据库需要检查引用的完整性。

索引:大多数数据库系统会自动为外键创建索引,以提高数据检索的效率。

4). 特殊情况

复合外键:可以在多个列上定义外键,这称为复合外键或多列外键。

CREATE TABLE order_details (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id),FOREIGN KEY (order_id) REFERENCES orders(order_id),FOREIGN KEY (product_id) REFERENCES products(product_id)
);

在这个例子中,order_details 表有两个外键,分别引用了 orders 表和 products 表的主键。

外键和数据完整性:外键约束是确保数据库数据完整性的重要机制,它帮助维护了数据的准确性和一致性。

通过理解和正确使用外键约束,数据库设计者和开发者可以确保数据之间的正确关系,避免数据孤立和不一致,从而提高数据库的整体质量和性能。

5. 默认值约束(DEFAULT)

默认值约束(DEFAULT)是数据库中用于指定列在插入数据时的默认值的一种机制。当你插入一行数据时,如果没有为某个列指定具体的值,那么该列将使用其默认约束定义的默认值。

1). 定义和目的

定义:默认值约束(DEFAULT)用于在插入新记录时,为表中某一列指定的默认值。如果插入数据时未指定该列的值,则数据库会自动使用这个默认值。

目的:默认值约束的主要目的是简化数据录入过程,同时确保数据的完整性和一致性。对于某些常见或默认的字段值,无需每次手动输入,系统自动填充。

2). 如何使用

默认值约束可以在创建表时定义,也可以在表创建后通过修改表结构来添加。

创建表时定义

CREATE TABLE employees (employee_id INT NOT NULL,first_name VARCHAR(50) NOT NULL,status VARCHAR(10) DEFAULT 'active'
);

在这个例子中,status列的默认值被设置为'active',当插入新记录且未提供status值时,数据库会自动将其设置为'active'

修改表时添加默认值

如果需要对现有的表添加或修改默认值,可以使用ALTER TABLE语句。例如:

ALTER TABLE employees
MODIFY status VARCHAR(10) DEFAULT 'active';

在这个例子中,我们将一个默认约束添加到了已存在的表的某个列上,这将使该列在插入数据时使用指定的默认值。

3). 影响和注意事项

数据插入:默认值约束影响数据插入操作。如果没有为某个列指定值且该列有默认约束,则数据库将自动使用默认值填充该列。

数据更新:默认值约束只适用于插入数据时,不会影响已存在的数据。

默认值类型:在创建或修改默认约束时,要小心确保默认值的类型与列的数据类型相兼容。

存储空间:使用不为NULL的默认值,可能会占用更多的存储空间。

系统值:默认值可以是常量值、函数或表达式,以提供更灵活的默认值设置选项。例如,可以使用GETDATE()这样的函数,使用DEFAULT约束插入系统值。

4). 删除默认值约束

如果你想要删除某个列的默认约束,可以使用ALTER TABLE语句来修改列定义。例如:

ALTER TABLE employees
ALTER COLUMN status DROP DEFAULT;

在这个例子中,我们删除了某个列的默认约束,这将使该列在插入数据时不再使用默认值。

通过理解和正确使用默认值约束,可以确保表中的数据有意义且符合预期,同时简化了数据插入的操作。

6. 检查约束(CHECK)

检查约束(CHECK constraint)是一种数据库约束,用于确保列中的数据符合特定的条件。通过定义检查约束,数据库可以自动验证插入或更新的数据是否满足预设的条件,从而保证数据的一致性和完整性。

1). 定义和目的

定义:检查约束用于限制数据库表中数据的有效性和一致性。它可以在插入或更新数据时对特定列的值进行验证,并防止不符合条件的数据被插入或更新。

目的:检查约束的主要目的是保持数据库中数据的一致性和有效性。它可以防止无效或不合法的数据被插入或更新到数据库表中。

2). 如何使用

检查约束可以在创建表时定义,也可以在表创建后通过修改表结构来添加。

创建表时添加检查约束

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),Age INT CHECK (Age >= 18)
);

在这个例子中,我们在Employees表的Age列上创建了一个CHECK约束。这个约束确保输入的任何年龄都必须是18岁或以上。

修改表时添加检查约束

如果表已经存在,可以使用ALTER TABLE语句来添加检查约束:

ALTER TABLE Employees
ADD CONSTRAINT CHK_Age CHECK (Age >= 18);

这个例子将Employees表的Age字段添加为检查约束,确保年龄大于或等于18岁。

3). 影响和注意事项

数据插入和更新:检查约束会阻止向表中插入或更新不满足条件的数据。如果尝试插入或更新的数据违反了CHECK约束,数据库将返回错误。

性能:虽然检查约束有助于保证数据完整性,但在大数据量下,它可能会影响插入和更新操作的性能,因为数据库需要检查每条数据是否满足约束条件。

复合检查约束:可以在多个列上定义检查约束,这称为复合检查约束或表级检查约束。这种约束可以同时对表中多个列设置限定条件。

删除检查约束:如果需要删除检查约束,可以使用ALTER TABLE语句来移除:

ALTER TABLE Employees
DROP CONSTRAINT CHK_Age;

4). 特殊情况

命名检查约束:在创建检查约束时,可以为约束命名,这有助于在需要时引用或删除特定的约束。

逻辑表达式:检查约束可以使用任何返回TRUEFALSE的逻辑(布尔)表达式创建。例如,可以通过创建检查约束将salary列中值的范围限制为从$15,000到$100,000之间的数据。

通过理解和正确使用检查约束,数据库设计者和开发者可以确保数据库中的数据符合预期的规范和要求,从而提高数据质量和可靠性。

7. 自动递增约束(AUTO_INCREMENT)

自动递增约束(AUTO_INCREMENT)是数据库中用于自动生成唯一序列号的一种特性,通常用于主键字段。以下是关于AUTO_INCREMENT约束的详细解释:

1). 定义和作用

定义:AUTO_INCREMENT是MySQL中一个特殊的属性,用于为表中的某个整数列自动生成唯一的序列号。每当向表中插入一条新记录时,如果没有明确指定该列的值,MySQL会自动为该列分配一个比当前最大值大1的值。

作用:AUTO_INCREMENT确保了字段的唯一性、非空性和自动递增性。它在创建主键、唯一标识符等场景中非常有用,如用户ID、订单号等。

2). 如何使用

创建表时指定AUTO_INCREMENT

CREATE TABLE users (id INT AUTO_INCREMENT,username VARCHAR(50),email VARCHAR(100),PRIMARY KEY (id)
);

在这个例子中,id列被设置为自动增长字段,并且它是主键。

修改现有表添加AUTO_INCREMENT

如果需要在现有的表中添加AUTO_INCREMENT属性,可以使用ALTER TABLE语句:

ALTER TABLE users MODIFY id INT AUTO_INCREMENT;

3). 特点和要求

  • 唯一性:一个表中只能有一个字段使用AUTO_INCREMENT约束,且该字段必须有唯一索引,以避免序号重复。
  • 非空性:AUTO_INCREMENT约束的字段必须具备NOT NULL属性。
  • 整数类型:AUTO_INCREMENT约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT等)。
  • 最大值限制:AUTO_INCREMENT约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT就会失效。

4). 插入数据

插入数据时,无需为AUTO_INCREMENT字段提供值,MySQL会自动处理:

INSERT INTO users (username, email) VALUES ('John Doe', 'john.doe@example.com');

5). 查看当前AUTO_INCREMENT值

可以使用SHOW TABLE STATUS命令来查看表的当前AUTO_INCREMENT值:

SHOW TABLE STATUS LIKE 'users';

在结果中,Auto_increment列显示了下一个AUTO_INCREMENT值。

6). 设置初始AUTO_INCREMENT值

默认情况下,AUTO_INCREMENT的初始值是1,但可以通过以下方式设置不同的初始值:

ALTER TABLE users AUTO_INCREMENT = 100;

这样,第一条插入的记录的id值将是100。

7). 删除与重置

删除表中的记录并不会重置AUTO_INCREMENT的值,除非手动进行重置。例如,使用TRUNCATE TABLE命令可以清空表中的所有记录并重置AUTO_INCREMENT值为1。

通过理解和正确使用AUTO_INCREMENT约束,可以简化插入操作,避免手动生成唯一值的麻烦,并确保数据的唯一性和一致性。

相关文章:

数据库表约束完全指南:提升数据完整性和准确性

数据库表约束完全指南:提升数据完整性和准确性 在数据库设计中,表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法,包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...

保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录

文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址:https://primevue.org/ 二、…...

数据库索引

以下是关于数据库索引的详细介绍,包括其概念、优点和缺点,并附带丰富的例子: 一、什么是数据库索引 数据库索引是一种数据结构,类似于书籍的目录,它能够帮助数据库管理系统(DBMS)迅速定位和访问…...

硬件选型规则

光源选型: 先用型号中带H的,没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型: 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…...

linux 架构详解

Linux 是一种开源的操作系统内核,最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核,用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。 整体架构 Linux系统通常被看作是一个层次化的结…...

Mybatis 学习 之 XML 手册

目录 单次执行单次新增单次更新单次删除 批量执行批量新增批量更新for 循环执行更新for 循环生成多条 sql&#xff0c;一次执行 批量删除 参数传递预处理方式 (OGNL表达式 #{})数据类型转换 直接替换 (EL表达式 ${}) 安全 单次执行 单次新增 <insert id"insert"…...

平面直角坐标系

图1 平面直角坐标系 横轴为x&#xff0c;竖轴为y&#xff0c;x、y的交点为O。 表示一个点经常表示为( x, y )&#xff0c;如图上的红点( 2, 3 )。 图2 点( 2, 3 )...

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…...

ubuntu下 grep 如何过滤包括G或者T字符串

在 grep 中&#xff0c;你可以通过使用正则表达式来匹配包含 G 或者 T 的字符串。例如&#xff1a; 1. 过滤包括 G 或 T 的字符串&#xff1a; grep -E G|T filename -E 表示启用扩展正则表达式&#xff08;也可以用 egrep&#xff09;。G|T 表示匹配 G 或 T。 2. 不区分大…...

【C语言】整数每一位数字出现次数

提相信你是最棒哒&#xff01;&#xff01;&#xff01; 文章目录 题目描述 题目代码 法一解析版C 法二解析版C 总结 题目描述 给出两个整数 M 和 N&#xff0c;求在序列[M, M 1, M 2,…, N - 1, N]中每一个数码出现了多少次。 输入格式 输入两个整数 M 和 N 。 输出格式…...

opencv Mat To Heif

高效率图像文件格式&#xff08;英语&#xff1a;High Efficiency Image File Format, HEIF&#xff1b;也称高效图像文件格式&#xff09;是一个用于单张图像或图像序列的文件格式。它由运动图像专家组&#xff08;MPEG&#xff09;开发&#xff0c;并在MPEG-H Part 12&#x…...

[GStreamer] gstbasesink 的 chain 函数

chain函数的定位&#xff1a; chain函数是上一个element到当前element的入口&#xff0c;chain函数处理完毕后&#xff0c;上一个函数的push_buffer 就得以返回。因此通常情况下 parent element 的核心逻辑都在 chain 函数里&#xff0c;再通过再 chain 函数里调用虚函数让 ch…...

评估大语言模型(LLM)在分子预测任务能够理解分子几何形状性能

摘要 论文地址&#xff1a;https://arxiv.org/pdf/2403.05075 近年来&#xff0c;机器学习模型在各个领域越来越受欢迎。学术界和工业界都投入了大量精力来提高机器学习的效率&#xff0c;以期实现人工通用智能&#xff08;AGI&#xff09;。其中&#xff0c;大规模语言模型&a…...

2024-12-04OpenCV视频处理基础

OpenCV视频处理基础 OpenCV的视频教学&#xff1a;https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中&#xff0c;cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频&#xff0c;或者从视频文件中读取帧。以下是如何使用…...

Springboot 2.7+解决跨域问题,到底是在SpringBoot中添加拦截器还是修改Nginx配置

文章目录 1摘要2 核心代码2.1 SpringBoot 全局跨域拦截器2.2 Nginx 配置跨域处理2.3 Nginx 和 SpringBoot 同时添加允许跨域处理会怎么样&#xff1f; 3 推荐参考资料 1摘要 跨域问题报错信息: Referrer Policy:strict-origin-when-cross-origin跨域问题是在前后端分离的情况…...

在Mac上安装多个Java版本

1、获取 Homebrew 的历史版本库 执行下面命令来获取 Homebrew 的历史版本库 brew tap homebrew/cask-versions2、安装java //java8 brew install java8 --cask//java11 brew install java11 --cask//java17 brew install --cask homebrew/cask-versions/microsoft-openjdk17…...

[小白系列]Ubuntu安装教程-安装prometheus和Grafana

Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。&#xff08;/data/prometheus/可根据自己需要调整&#xff09; global:scrape_interval: 15s # By default, scrape targets ev…...

HTTP中GET和POST详细理解

HTTP中GET和POST 简单来说 GET 的语义是从服务器获取指定的资源&#xff0c;这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中&#xff0c;URL 规定只能支持 ASCII&#xff0c;所以 GET 请求的参数只允许 ASCII 字符 &#xff0c;而且浏览器…...

Vant UI Axure移动端元件库:提升移动端原型设计效率

UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI&#xff0c;作为一款基于Vue.js的轻量、可靠的移动端组件库&#xff0c;自2017年开源以来&#xff0c;凭借其丰富的组件库、良好的性能以及广泛的兼容性&#xff0c;在移动端开发领域崭露头角&#xff0c;赢得了众多开…...

y3编辑器文档3:物体编辑器

文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…...

【ESP32】ESP-IDF开发 | DAC数模转换器+余弦波输出例程

1. 简介 ESP32上的数字模拟转换器 (DAC) 带有 2 个 8 位通道&#xff0c;因此可输出2路模拟信号。在低功耗模式下也可由 ULP 协处理器通过控制寄存器来实现完全控制。内部自带余弦波形生成器&#xff0c;可用于生成余弦波形/正弦波形&#xff0c;用户可调整频率、振幅、相位和直…...

java中的递归

大家好&#xff0c;今天我们来学习一下java中的递归&#xff0c;相信大家应该也对递归有一点了解吧&#xff0c;如果没有也没有关系&#xff0c;我们现在就来了解一下。 五、递归 自身中包含了自己,遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问…...

残差网络连接,使得输入与输出的尺寸一样

def forward(self, x):out self.layer1(x)out self.layer2(out)# 使用插值将输入x上采样至与layer2输出相同的尺寸x F.interpolate(x, size(out.size(2), out.size(3)), modebilinear, align_cornersFalse)# 确保x的通道数与out匹配x x[:, :out.size(1), :, :] # 选择前ou…...

SAP SD学习笔记18 - 投诉处理4 - 请求书订正依赖,投诉处理流程的总结

上一章讲了 Credit/Debit Memo依赖&#xff0c;Credit/Debit Memo。Credit Memo依赖 本质上是一张受注票&#xff1b;Credit Memo 本质上是一张请求票。 SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖&#xff0c;Credit/Debit Memo-CSDN博客 本章继续讲本图中的内容…...

记录下nginx接口代理配置问题

其中api和api1是前面定义的upstream&#xff0c;ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的&#xff0c;因为会代理到 后端的 /api1/...接口&#xff0c;而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…...

flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示

flink-connector-mysql-cdc&#xff1a; 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本&#xff1a;3.2.0 flink版本&…...

001-Redis介绍

目录 一、Redis 简介 二、Redis 特性 三、Redis 下载安装 四、Redis 可视化管理界面工具 一、Redis 简介 1.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的 key-value 数据库。 2. 它在内存中存储数据,并提供了持久化功能,可以将数据保存到磁盘中,它是一种 NoS…...

数据结构---单链表

目录 一、概念 二、分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 三、接口实现 1.定义结构 2、申请节点 3、尾插 4、头插 5、尾删 6、头删 7.查找&#xff0c;也可以充当修改 8、在pos之前插入x 9、在pos之后插入x ​编辑 10、删除pos位置 …...

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时&#xff0c;遇到了一个有趣的问题&#xff1a;当添加重复的商品编号时&#xff0c;页面同时弹出了两条 "商品编号已存在" 错误提示&#xff1a; 这个问题暴露了前端错误处理机制的混乱&#xff0c;让我们从这个问题出发&…...

在做题中学习(78):数组中第K个最大元素

解法&#xff1a;快速选择算法 说明&#xff1a;堆排序也是经典解决topK问题的算法&#xff0c;但时间复杂度为&#xff1a;O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章&#xff0c;分别学习&#xff1a;数组分三块&#xff0c;随机选择基准…...

药剂学试卷

1【单选题】在倍氯米松气雾剂中加入四氟乙烷是用作 C A、 助悬剂 B、 乳化剂 C、 抛射剂 D、 防腐剂 2【单选题】一步制粒机可完成的工序是 B A、 粉碎→混合→制粒→干燥 B、 混合→制粒→干燥 C、 过筛→制粒→混合→干燥 D、 过筛→制粒→混合 3【单选题】小檗碱片包…...

3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切

3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切 文章目录 0 论文工作1 方法2 实验结果 0 论文工作 最近提出的高斯Splatting方法实现了高质量的实时三维场景新视角合成。然而&#xff0c;它仅仅关注外观和几何建模&#xff0c;缺乏细粒度的物体级场景理解。为了解决…...

力扣143.重排链表

题目描述 题目链接143. 重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff…...

本文介绍麒麟信安服务器系统(kylinsec)的安装。

本文介绍麒麟信安服务器系统&#xff08;kylinsec&#xff09;的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品&#xff1a; https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址&#xff1a; https://mirrors.kylinsec.com…...

单链表---回文结构

判断某一个单链表是否是回文结构&#xff0c;是返回true、不是返回false。 所谓的回文结构&#xff0c;就是类似对称结构&#xff1a; 对于奇数与偶数个结点均是如此。 那么就有思路&#xff1a;①找到链表的中间结点②逆置后半部分或前半部分③比较两者 ①找中间结点&#x…...

Java --- 反射

目录 一.什么是反射&#xff1f; 二.反射的核心方法和功能&#xff1a; 1.获取类的元信息&#xff1a; 2. 动态实例化对象&#xff1a; 3. 访问字段&#xff08;包括私有字段&#xff09;&#xff1a; 4. 调用方法&#xff08;包括私有方法&#xff09;&#xff1a; 5.…...

python编程Day12-属性和方法的分类

私有和公有 在python中 定义类的时候&#xff0c;可以给 属性和方法设置 访问权限&#xff0c;即规定在什么地方可以使用。 权限一般分为两种&#xff1a;公有权限、私有权限 公有权限 定义&#xff1a;直接定义的属性和方法就是公有的特点&#xff1a; 可以在任何地方访问和使…...

C#实现TCP客户端和服务器

本文将介绍如何使用C#实现TCP客户端和服务器的基本功能&#xff0c;客户端与服务器可以相互发送消息。 效果展示 服务器端实现 首先&#xff0c;我们实现TCP服务器。以下是服务器端所需的类和代码&#xff1a; using System; using System.Collections.Generic; using Syste…...

数据库编程: JDBC 中数据库驱动包的安装,配置及引用

目录 驱动包的下载安装 1. 去oracle 官方网站下载 2. github 的开源软件 3. 中央仓库(推荐使用这个) 驱动包的配置及引用 1. 第一步: 打开idea, 在 idea 中创建新的项目 2. 然后我们要在 jdbc_1 目录下创建一个新的目录包 3. 最后引入MySQL 的驱动包, 作为项目的依赖 尾…...

mx linux 在konsole终端中无法输入中文的解决方法

在mx linux系统中&#xff0c;浏览器可以正常输入中文&#xff0c;但是终端窗口中无法输入中文的解决方法&#xff0c;可以通过以下步骤安装 fcitx - frontend - qt5 组件&#xff1a; 1. 打开终端。你可以通过系统菜单或者快捷键&#xff08;如 Ctrl Alt T &#xff09;来…...

./configure 安装ngnix的命令

./configure 是一个在 Unix 和类 Unix 系统中常用的 shell 脚本命令&#xff0c;主要用于配置软件源代码包&#xff0c;以便进行编译和安装。这个命令通常在从源代码编译软件之前执行&#xff0c;它会自动检测系统的配置并生成适合该系统的 Makefile。 以下是 ./configure 脚本…...

网络安全之接入控制

网络安全之接入控制 身份鉴别 ​ 定义:验证主题真实身份与其所声称的身份是否符合的过程&#xff0c;主体可以是用户、进程、主机。同时也可实现防重放&#xff0c;防假冒。 ​ 分类:单向鉴别、双向鉴别、三向鉴别。 ​ 主题身份标识信息:密钥、用户名和口令、证书和私钥 I…...

2.1 关系模型

关系模型的基本概念 关系&#xff1a;二维表&#xff0c;通常在数据库中表现为一个表&#xff1b; 属性&#xff1a;关系中的一个列即为关系的一个属性&#xff1b; 域&#xff1a; 每个属性的取值范围即为该属性的域&#xff1b; 元组&#xff1a;关系中的一个行是一个元组…...

深入浅出 Go 语言 sync包中的互斥锁、条件变量

深入浅出 Go 语言 sync包中的互斥锁、条件变量 引言 在并发编程中&#xff0c;多个 Goroutine 同时访问共享资源可能会导致数据竞争&#xff08;Race Condition&#xff09;&#xff0c;进而引发程序的不一致性或崩溃。为了确保并发程序的正确性和稳定性&#xff0c;Go 语言提…...

利用Python实现子域名简单收集

免责申明 本文仅是用于学习研究子域名信息收集&#xff0c;请勿用在非法途径上&#xff0c;若将其用于非法目的&#xff0c;所造成的一切后果由您自行承担&#xff0c;产生的一切风险和后果与笔者无关&#xff1b;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法…...

npm发布插件到私有仓库保姆级教程

在开发项目的过程中&#xff0c;我们经常需要安装插件依赖&#xff0c;那么怎么把自己开发的组件封装成一个插件&#xff0c;并发布到npm 插件市场或者上传到私有仓库里面呢&#xff1f;今天总结下自己发布插件到私有仓库的记录&#xff1a; 一、创建组件 执行命令创建一个空…...

利用Java easyExcel库实现高效Excel数据处理

在Java应用程序中&#xff0c;处理Excel文件是一项常见任务&#xff0c;尤其是在需要读取、写入或分析大量数据时。easyExcel是一个基于Java的高性能Excel处理库&#xff0c;它提供了简洁的API和优化的性能&#xff0c;以简化Excel文件的处理。本文将指导您如何使用easyExcel库…...

基于Springboot的校园交友网站设计与实现

1.1 管理信息系统概述 管理信息系统是计算机在信息管理领域的一种实用技术。通过运用管理科学、数学和计算机应用的原理及方法&#xff0c;在符合软件工程规范的原则下&#xff0c;形成一套完整的理论和方法体系。是一个以人、计算机和其他外部设备组成的可以进行信息的收集、…...

android studio 读写文件操作(应用场景三)

android studio版本&#xff1a;2023.3.1 patch2 例程&#xff1a;filesaveandread 其实我写这个都是我记录我要做后个数独小游戏&#xff0c;每一个都是为了解决一个问题。即是分享也是备忘&#xff0c;反正我什么都不会&#xff0c;就是一顿瞎改&#xff0c;不行就研究。这…...