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

【MySQL】数据库约束

 

 个人主页♡喜欢做梦

欢迎  👍点赞  ➕关注  ❤️收藏  💬评论


目录

 ✨一、数据库的约束

🌟二、数据库约束的分类

🌍 1.非空约束(NOT NULL)

1.定义

2.格式

3.示例:

列的信息可以为空:

 指定列的信息不能为空:

🌎 2.DEFAULT(默认约束)

1.定义

2.格式

3.示例:

不自定义默认值:

自定义默认值:

🌏3.UNIQUE(唯一约束)

1.定义

2.格式

3.示例:

不指定列唯一:

指定uniqe:

🌍4.PRIMARY KEY(主键约束)

1.定义

2.格式

3.示例:

4.AUTO_INCREMENT(自增类型) 

🌎5.FORRIGN KEY(外键约束)

1.定义

2.格式

3.示例:

​编辑

🌏 6.CHECK(检查约束)

1.定义

2.格式

3.示例 

💫三、总结 


✨一、数据库的约束

1.什么是数据库约束?

数据库约束是关系型数据库的一个重要功能,用于确保数据的完整性、一致性和准确性(数据本身是否正确、关联关系是否正确)。数据库约束一般指定在列。 


🌟二、数据库约束的分类

🌍 1.非空约束(NOT NULL)

1.定义

定义:指定表中的某列不能存储NULL值。例如:在“学生信息表”中,指定学生的姓名不能为空,确保学生基本信息的完整性。

2.格式

字段名 字段类型 not null

3.示例:

列的信息可以为空:
 -- 创建学生表1:列表的列可以指定为空
mysql>  create table students(->  id bigint,->  name varchar(50));
Query OK, 0 rows affected (0.05 sec)-- 查看学生表结构,NULL都为YES表示,该列学生信息可以为空
mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)-- 插入学生信息
mysql>  insert into students values(1,'张三'),(2,NULL);
Query OK, 2 rows affected (0.11 sec)
Records: 2  Duplicates: 0  Warnings: 0-- 查看插入后的学生信息表:id为2的学生信息不完整
mysql> select* from students;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
|    2 | NULL   |
+------+--------+
2 rows in set (0.00 sec)
 指定列的信息不能为空:
-- 创建学生表2:指定其列不能为空
mysql> create table students2(-> id bigint not null,->  name varchar(50) not null);
Query OK, 0 rows affected (0.03 sec)-- 查看学生表2结构:NULL都为NO表示该列不能为空
mysql> desc students2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | NO   |     | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)-- 示范错例:在指定某列不能为空的情况下,插入为空的数据,会发生报错
mysql> insert into students2 values(1,'李四'),(2,null);
ERROR 1048 (23000): Column 'name' cannot be null-- 正确示范:
mysql> insert into students2 values(1,'李四'),(2,'王五');
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0
  • 在查看表结构时,如果NULL为YES,则表示该列学生信息可以为空(NULL);如果NULL为NO,则表示该列学生信息不能为空(NULL);
  • 当指定该列的值不能为空时,则表示该列学生信息不可以为空(NULL)。

🌎 2.DEFAULT(默认约束)

1.定义

定义:在没有给某列赋值是制定一个默认值。

2.格式

字段名 字段类型 default 默认值

3.示例:

不自定义默认值:
-- 给学生表1只插入id,不对name进行赋值
mysql> insert into students(id) values(3);
Query OK, 1 row affected (0.04 sec)-- id为3的name其默认值为NULL
mysql> select * from students;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
|    2 | NULL   |
|    1 | 老六   |
|    3 | NULL   |
+------+--------+
4 rows in set (0.00 sec)
自定义默认值:
-- 重新创建学生表2,将name列的默认值设置为‘不知道’
mysql>  create table students2(->  id bigint,->  name varchar(50) default '不知道');
Query OK, 0 rows affected (0.11 sec)-- 查看学生表2的表结构:其默认值为‘不知道’
mysql> desc students2;
+-------+-------------+------+-----+-----------+-------+
| Field | Type        | Null | Key | Default   | Extra |
+-------+-------------+------+-----+-----------+-------+
| id    | bigint(20)  | YES  |     | NULL      |       |
| name  | varchar(50) | YES  |     | 不知道    |       |
+-------+-------------+------+-----+-----------+-------+
2 rows in set (0.01 sec)-- 只添加id
mysql>  insert into students2(id) values(3);
Query OK, 1 row affected (0.11 sec)-- 查看结果
mysql> select* from students2;
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | 不知道    |
+------+-----------+
1 row in set (0.00 sec)

🌏3.UNIQUE(唯一约束)

1.定义

定义:确保表中指定列的值是唯一的,当可以为空值。

2.格式

字段名 字段类型 unique

3.示例:

不指定列唯一:
-- 重建学生表1
mysql> create table students(-> id bigint,-> name varchar(50));
Query OK, 0 rows affected (0.07 sec)-- 查看表结构
mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)-- 添加学生信息
mysql>  insert into students values(1,'张三'),(2,NULL),(1,'老六');
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 查看学生信息:可以发现存在重复学号
mysql> select * from students;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
|    2 | NULL   |
|    1 | 老六   |
+------+--------+
3 rows in set (0.00 sec)

为了确保学号的唯一性,我们在id列进行指定unique。

指定uniqe:
-- 创建学生表2
mysql> create table students2(->  id bigint unique,->  name varchar(50));
Query OK, 0 rows affected (0.12 sec)-- 查看表结构:
mysql> desc students2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | YES  | UNI | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)-- 添加与学生表1相同的信息:可以发现当出现重复id时,会发生报错现象
mysql> insert into students2 values(1,'张三'),(2,NULL),(1,'老六');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

🌍4.PRIMARY KEY(主键约束)

1.定义

定义:NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定的记录。但每个表只能有一个主键。

2.格式

写法一:

字段名 字段类型 not null unique

写法二:

字段名 字段类型 primary key

3.示例:

-- 写法1
-- 重键学生表:将学生表进行主键约束
mysql> create table students(-> id bigint not null unique,-> name varchar(50) not null);
Query OK, 0 rows affected (0.15 sec)-- 查看表结构:
mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)-- 写法2
-- 重建学生表2与学生表1结构相同
mysql>  create table students2(->  id bigint primary key,->  name varchar(50) not null);
Query OK, 0 rows affected (0.13 sec)-- 查看表结构:
mysql>  desc students2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

注意事项:

  • 一个表中只能有一个主键 
  • 一个主键可以包含多个列(符合主键) 
  • 一个主键可以同时包含多个列(符合主键),但只有符合主键中的所有列相同才能是相同,也就是如果只有一列相同的值但是其他列不相同,也是不符合的。
-- 创建学生表4
mysql>  create table students4(->  id bigint ,->  name varchar(50),->  primary key(id,name)); -- 设置复合主键
Query OK, 0 rows affected (0.14 sec)-- 查看表结构
mysql> desc students4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | bigint(20)  | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   | PRI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)-- 重复插入1,'王五',两者列都相同,不符合复合主键条件,发生报错现象
mysql>  insert into students4 values(1,'王五'),(1,'王五');
ERROR 1062 (23000): Duplicate entry '1-王五' for key 'PRIMARY' -- '1-王五'是复合主键的组合-- 插入元素(1,'张三')
mysql> insert into students4 values(1,'张三');
Query OK, 1 row affected (0.10 sec)-- 插入元素(1,'王五'),(2,'王五')
-- 可以发现(1,'王五')中的id值与(1,'张三')的id值相同
-- 并且(1,'王五')的name与(2,'王五')的name相同
-- 当仍然可以插入,复合主键中只要所有列没有都相同,都符合条件
mysql> insert into students4 values(1,'王五'),(2,'王五');
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0-- 查看表中数据
mysql> select * from students4;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  1 | 王五   |
|  2 | 王五   |
+----+--------+
3 rows in set (0.00 sec)

4.AUTO_INCREMENT(自增类型) 

定义:是关键字,实现自增类型,常用于整数类型字段,常用于整数类型字段,每次寻找当前插入列的最大值,在此基础上进行自增,且会自动进行排列。

-- 创建学生表5
mysql> create table students5(-> id bigint primary key auto_increment,-- 设置自增键-> name varchar(50));
Query OK, 0 rows affected (0.09 sec)-- 不写id,只添加name
mysql> insert into students5(name) values('一一'),('老三'),('老四');
Query OK, 3 rows affected (0.10 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 查看列表元素:id从1开始依次自增
mysql> select * from students5;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一一   |
|  2 | 老三   |
|  3 | 老四   |
+----+--------+
3 rows in set (0.00 sec)-- 自定义id添加元素
mysql>  insert into students5 values(7,'张三'),(9,'王五');
Query OK, 2 rows affected (0.13 sec)
Records: 2  Duplicates: 0  Warnings: 0-- 只添加name
mysql> insert into students5(name) values('李氏');
Query OK, 1 row affected (0.07 sec)-- 数据库会先找到最大值,然后在这个基础上自增生成一个新的值
mysql>  select * from students5;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一一   |
|  2 | 老三   |
|  3 | 老四   |
|  7 | 张三   |
|  9 | 王五   |
| 10 | 李氏   |
+----+--------+
6 rows in set (0.00 sec)-- 添加元素
mysql> insert into students5 values(5,'王氏');
Query OK, 1 row affected (0.08 sec)mysql> insert into students5(name) values('张三');
Query OK, 1 row affected (0.04 sec)-- 可以发现会进行根据id进行自动排序
mysql>  select * from students5;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一一   |
|  2 | 老三   |
|  3 | 老四   |
|  5 | 王氏   |
|  7 | 张三   |
|  9 | 王五   |
| 10 | 李氏   |
| 11 | 张三   |
+----+--------+
8 rows in set (0.00 sec)

🌎5.FORRIGN KEY(外键约束)

1.定义

定义:外键约束用于建立和加强两个表之间的关联。一个表的外键指向另一个表的主键。外键约束能够保证引用的完整性,即一个表的外键值必须存在于另一个表的主键列中。

2.格式

foreign key (字段名) references 主表(列)

3.示例:

没有建立外键约束:

-- 创建课程表(编号,课程名称)
mysql> create table course(-> id bigint primary key auto_increment,-> name varchar(20));
Query OK, 0 rows affected (0.06 sec)-- 创建学生表(学生编号,学生姓名,课程编号)
mysql> create table student(-> id bigint primary key auto_increment,-> name varchar(20) not null,-> course_id bigint);
Query OK, 0 rows affected (0.08 sec)-- 插入科目名称
mysql> insert into course(name) values('english'),('math'),('chinese');
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 插入学生信息:可以发现没有建立主外键练习,即使没有该科目编号也能进行插入
mysql> insert into student(name,course_id) values('张三',2),('李四',3),('王五',5);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> select* from student;
+----+--------+-----------+
| id | name   | course_id |
+----+--------+-----------+
|  1 | 张三   |         2 |
|  2 | 李四   |         3 |
|  3 | 王五   |         5 |
+----+--------+-----------+
3 rows in set (0.00 sec)mysql> select * from course;
+----+---------+
| id | name    |
+----+---------+
|  1 | english |
|  2 | math    |
|  3 | chinese |
+----+---------+
3 rows in set (0.00 sec)

建立外键约束:

-- 课程表(主表)
mysql> create table course(-> id bigint primary key auto_increment,-> name varchar(20));
Query OK, 0 rows affected (0.06 sec)mysql> insert into course(name) values('english'),('math'),('chinese');
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 学生表:建立主外键联系(从表)
mysql>  create table student2(-> id bigint primary key auto_increment,->  name varchar(20) not null,->  course_id bigint,->  foreign key (course_id) references course(id)); -- 建立主外键联系
Query OK, 0 rows affected (0.13 sec)-- 查看学生表结构:MUL代表存在外键关系
mysql> desc student2;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| name      | varchar(20) | NO   |     | NULL    |                |
| course_id | bigint(20)  | YES  | MUL | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)-- 插入与上一段代码中相同的元素,发生报错现象:
-- 报错原因:student2中course_id是外键,引用的是course表中的id。
-- 数据库要检测插入course_id中的数据,在course表中的id是否存在,不存在则不满足外键约束
mysql> insert into student2(name,course_id) values('张三',2),('李四',3),('王五',5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`java2`.`student2`, CONSTRAINT `student2_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`))-- 插入数据
mysql>  insert into student2(name,course_id) values('张三',2),('李四',3),('王五',3);
Query OK, 3 rows affected (0.12 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> select*from course;
+----+---------+
| id | name    |
+----+---------+
|  1 | english |
|  2 | math    |
|  3 | chinese |
+----+---------+
3 rows in set (0.00 sec)mysql>  select*from student2;
+----+--------+-----------+
| id | name   | course_id |
+----+--------+-----------+
|  4 | 张三   |         2 |
|  5 | 李四   |         3 |
|  6 | 王五   |         3 |
+----+--------+-----------+
3 rows in set (0.00 sec)-- 从表中的性质与主表无关
mysql>  insert into student2(name,course_id) values('赵六',null);
Query OK, 1 row affected (0.09 sec)
  •  外键列的性质与被引用表中的主键列的性质并无冲突。例如:当外键列允许插入null值,与被引用表中得主键列的性质并不冲突。

  • 如果要删除主表中的记录,要先查看子表中是否对该条记录有依赖,如果有依赖,需要先删除子表中的元素,否则发生报错现象。 


🌏 6.CHECK(检查约束)

1.定义

定义:用于限制列的值必须满足的特定条件,可以使用逻辑表达式来定义检查约束,指定列值的取值范围、格式或其他条件。

2.格式

check(特定条件)

3.示例 

-- 创建学生表
mysql>  create table student3(->  id bigint,->  gender varchar(20),->  check(gender='男'or gender='女'));
Query OK, 0 rows affected (0.04 sec)-- 插入:这个记录不符合条件,插入会失败。
mysql> insert into student3 values(1,'无');
  •  在mysql中,CHECK并不是在所有版本的mysql中都原生支持。从mysql 8.0,。16版本开始,mysql开始支持CHECK约束。如果你使用的是mysql 8.0.16或更高版本,你可以使用CHECK约束来确保列值满足特定条件。

💫三、总结 

  • NOT NULL(非空约束):指定表中的某列不能存储NULL值;
  • UNIQUE(唯一约束):确保表中指定列的值是唯一的,当可以为空值;
  • DEFAULT(默认约束):在没有给某列赋值是制定一个默认值;
  • PRIMARY KEY(主键约束):NOT NULL和UNIQUE的结合;
  • FORRIGN KEY(外键约束):外键约束用于建立和加强两个表之间的关联;
  • CHECK(检查约束):用于限制列的值必须满足的特定条件。

相关文章:

【MySQL】数据库约束

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 ✨一、数据库的约束 🌟二、数据库约束的分类 🌍 1.非空约束(NOT NULL) 1.定义 2.格式 3.示例: 列的信息可…...

Firewalld防火墙

目录 Firewald 防火墙概述 Firewalld 简介 firewalld 与 iptables service的区别 Firewalld 网络区域 Firewalld 防火墙图形配置方法 服务选项 端口号 协议选项 源端口选项 伪装选项 端口转发 ICMP过滤器 防火墙的配置运行状态 运行时和永久有什么区别 Firewalld 防火墙 firewa…...

使用 TensorFlow 和 Keras 构建 U-Net

U-Net是图像分割领域中最为著名的架构之一。U-Net 因其形状而得名,它是一种全卷积架构,首先将图像收缩,然后将其扩展为输出结果。虽然这种收缩路径构建了一个学习特征的层次结构,但跳过连接有助于在扩展路径中将这些特征转换回相关…...

【网络篇】TCP vs UDP底层区别+网络编程概念

大家好呀 我是浪前 今天讲解的是网络篇的第三章:网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座:网络编程的本质: 网络编程的重要概念:客户端和服务器: 客户端和服务器的交互模…...

如何保存服务器mysql数据库的数据到本地文件

打开mysql命令行如图1 图1 mysql命令行 修改文件保存路径。 在mysql安装目录下,找到my.ini文件,找到secure-file-priv变量配置的地方,修改对应的值,然后重启mysql,此时把文件放到指定路径,再执行导入导出…...

Flutter学习 滚动组件(2):ListView进阶使用

目录 前言:一、实现复杂的ListView列表:1.1 Item布局封装1.2 ListView的使用1.3 增加分割线 二、实现ListView下拉刷新:三、实现上拉加载更多:四、实现下拉刷新、上拉加载更多:五、ListView滚动方向和控制:…...

linux oracle 19c 静默安装

oracle数据库有个比较很抓瞎的事情,不同的版本搭建的大致流程是一样的,但是在实操细节上会有不同,比如操作的脚本位置和配置项等等,这些会变,所以需要时常积累不同版本的文档 这里有一点要说明,之所以使用…...

中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)

一、Linux宿主机部署 1、环境准备 操作系统:推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求: 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间(根据数据量评估)。CPU需支持SSE4.2指令集(可通过以下命令检查&#…...

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…...

Warcraft Logs [Classic] [WCL] BOSS ID query

Warcraft Logs [Classic] [WCL] BOSS ID query 所有副本BOSSID查询 https://wowpedia.fandom.com/wiki/DungeonEncounterID#Retail IDNameMapInstanceIDPatch227High Interrogator GerstahnBlackrock Depths230228Lord RoccorBlackrock Depths230229Houndmaster GrebmarBlackro…...

MySQL——事务

一、什么是事务? 事务(Transaction) 是数据库操作的最小逻辑单元,它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功,要么全部失败,从而维护数据的完整性。例如,银行转…...

spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。 这个时候,向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义:将文档向量化,保证内容越相似的文本,…...

MACOS 上的 快捷指令怎么用,有哪些分享资源可以用

一、快捷指令的基本概念与历史 快捷指令(Shortcuts)是苹果生态中的自动化工具,最初以第三方应用Workflow(2014年推出)的形式出现,2017年被苹果收购后更名为Shortcuts,并深度集成到iOS、iPadOS和macOS系统中。从macOS Mojave(10.14)开始,快捷指令正式登陆Mac平台,并…...

最长子序列长度(LIS)--个数遍历的二分+贪心优化

B3637 最长上升子序列 - 洛谷 #include<bits/stdc.h> #include<string> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n; int g[N]; int dp[N]; int ma0; int main() { cin>>n; memset(g,0x3f,sizeo…...

RenderStage::runCameraSetUp

文章目录 RTTosg::Camera::_bufferAttachmentMapRenderStage::BufferComponent和RenderStage::_bufferAttachmentMapCamera::attach(BufferComponent buffer, GLenum internalFormat)Camera::attach(BufferComponent buffer, osg::Texture* texture.....Camera::attach(BufferC…...

突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限?

突破速率瓶颈&#xff1a;毫米波技术如何推动 5G 网络迈向极限&#xff1f; 引言 5G 网络的普及&#xff0c;已经让我们告别了“加载中”时代&#xff0c;实现了更快的数据传输、更低的延迟和更高的设备连接密度。而在 5G 技术的核心中&#xff0c;毫米波&#xff08;mmWave&…...

前端面试真题集合(一)

一、Vue的响应式原理 Vue的响应式系统通过数据劫持和依赖追踪实现,核心流程如下: 数据劫持 • Vue 2.x:使用Object.defineProperty递归遍历数据对象,将属性转换为getter/setter,拦截属性的读取和修改操作。 • Vue 3.x:改用Proxy代理对象,支持动态属性添加和数组变化监听…...

聊聊Spring AI Alibaba的ElasticsearchDocumentReader

序 本文主要研究一下Spring AI Alibaba的ElasticsearchDocumentReader ElasticsearchDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-elasticsearch/src/main/java/com/alibaba/cloud/ai/document/reader/es/ElasticsearchDocumentR…...

【网络技术_域名解析DNS】三、DNS 中间件实践应用与优化策略

一、DNS 中间件在典型行业的实践应用 1.1 金融行业&#xff1a;保障交易安全与服务稳定​ 金融行业对网络服务的安全性和稳定性要求极高&#xff0c;DNS 中间件在此领域发挥着不可替代的作用。以某银行线上支付系统为例&#xff0c;在 CentOS 7 环境下部署 DNS 中间件时&…...

Node.js 异步I/O与事件循环深度优化

Node.js 的核心魅力在于其异步、非阻塞I/O模型&#xff0c;这使得它在处理高并发、I/O密集型应用&#xff08;如Web服务器、API网关、实时通信服务&#xff09;时表现出色。然而&#xff0c;这种强大的能力并非凭空而来&#xff0c;它深深植根于其独特的**事件循环&#xff08;…...

npm 常用操作和配置

一、npm 核心操作 1. 初始化项目 npm init # 交互式创建 package.json npm init -y # 跳过提问&#xff0c;直接生成默认 package.json2. 安装依赖 npm install <package> # 安装包到本地 node_modules&#xff08;生产依赖&#xff09; npm in…...

嵌入式芯片中的 低功耗模式 内容细讲

电源域与运行级别概述 电源域&#xff08;Power Domain&#xff09; 核心域&#xff08;Core Domain&#xff09;&#xff1a;包括 CPU 核心和关键架构模块&#xff08;如 NVIC、CPU 内核寄存器&#xff09;。 外设域&#xff08;Peripheral Domain&#xff09;&#xff1a;…...

React-请勿在循环或者条件语句中使用hooks

这是React Hooks的首要规则&#xff0c;这是因为React Hooks 是以单向循环链表的形式存储&#xff0c;即是有序的。循环是为了从最后一个节点移到一个节点的时候&#xff0c;只需通过next一步就可以拿到第一个节点&#xff0c;而不需要一层层回溯。React Hooks的执行&#xff0…...

React-memo (useMemo, useCallback)

在react中&#xff0c;当我们setState之后&#xff0c;若值发生变化&#xff0c;则会重新render当前组件以及其子组件 (默认情况下)&#xff0c;在必要的时候&#xff0c;我可使用memo (class组件则对应shouldComponentUpdate、PureComponent)进行优化&#xff0c;来减少无效渲…...

点云数据处理开源C++方案

一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全&#xff0c;算法丰富科研、工业级应用BSD★★★★★Open3D现代API&#xff0c;支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...

android测试依赖

Android 项目中常用的测试相关库 1. androidx.arch.core:core-testing:2.2.0 作用&#xff1a; 提供与 Android Architecture Components&#xff08;如 LiveData、ViewModel&#xff09;相关的测试工具。主要用于测试基于 LiveData 的异步操作。 常见功能&#xff1a; 即时…...

Gradle与Idea整合

文章目录 1. Groovy 简介2. Groovy 安装[非必须]3. 在idea中创建java工程 1. Groovy 简介 在某种程度上&#xff0c;Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上&#xff0c;它可以很好地与Java代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言…...

【数据结构】励志大厂版·初阶(复习+刷题)单链表

前引&#xff1a;此篇文章作为小编复习的记录&#xff0c;将快速回忆单链表的知识点&#xff0c;讲解单链表增删查找的实现&#xff0c;每个细节之处要注意的地方&#xff0c;解释为何这样设计。文章末尾包含了单链表算法题&#xff0c; 同样解释详细&#xff0c;借助题目再次巩…...

前端面试宝典---参数解构+默认值的面试题

重点要义 对于函数参数要解构&#xff0c;且参数有默认值的&#xff0c;一律用Object.assign的思路去合并参。 看不懂这句话没关系&#xff0c;看下面的例子\ 例子1 function fn ({ x 1, y } { y: 10 }) {console.log(x, y) } fn() // 1 10没有传递实参&#xff0c;你就把{ …...

【开发心得】筑梦上海:项目风云录(16)

目录 代码反面案例 李青与诺基亚的兴衰 并行项目下的利益纠葛与团队协作 未完待续。。。 今天分享的是一个反面案例&#xff0c;也算是一个避坑指南了。 代码反面案例 今天分享的代码是一个反面案例&#xff0c;当时由于项目人员变动频繁&#xff0c;经常是新人看不太懂旧…...

Neovim插件深度解析:mcphub.nvim如何用MCP协议重构开发体验

在AI与工具链深度融合的今天,Neovim 作为现代开发者的生产力工具,正通过插件生态不断突破边界。mcphub.nvim 作为一款基于 MCP(Model Context Protocol) 协议的插件,重新定义了Neovim与智能工具的交互方式。它不仅简化了MCP服务器的集成与管理,更通过直观的UI和生态整合,…...

Qt UDP 通信的详细实现步骤和示例代码

在 Qt 中实现 UDP 通信主要使用 QUdpSocket 类。以下是 UDP 通信的详细实现步骤和示例代码&#xff1a; 一、UDP 通信基础 无连接协议&#xff1a;不需要建立持久连接数据报模式&#xff1a;以独立数据包&#xff08;datagram&#xff09;形式发送适用场景&#xff1a;实时性要…...

(二)Trae 配置C++ 编译

Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…...

动态规划算法的欢乐密码(一):斐波那契数模型

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题&#xff0c;并利用子问题的解来…...

【FreeRTOS进阶】优先级翻转现象详解及解决方案

【FreeRTOS进阶】优先级翻转现象详解及解决方案 接下来我们聊聊优先级翻转这个经典问题。这个问题在实时系统中经常出现&#xff0c;尤其是在任务较多的场景下&#xff0c;而且问题定位起来比较麻烦。 什么是优先级翻转&#xff1f; 优先级翻转的核心定义很简单&#xff1a;…...

解决 IntelliJ IDEA 项目启动时端口冲突问题

1.问题 Description: The Tomcat connector configured to listen on port 8082 failed to start. The port may already be in use or the connector may be misconfigured. Action: Verify the connectors configuration, identify and stop any process thats listening…...

笔试专题(十一)

文章目录 添加字符&#xff08;暴力枚举&#xff09;题解代码 城市群数量&#xff08;dfs&#xff09;题解代码 判断是不是平衡二叉树&#xff08;递归&#xff09;题解代码 最大子矩阵&#xff08;二维前缀和&#xff09;题解代码 小葱的01串 &#xff08;固定区间大小的滑动窗…...

C++11新增语法:列表初始化

前言&#xff1a; 接下来我们将要讲解&#xff0c;相较于c98&#xff0c;c11中新增的语法以及如何使用~。我们首先来讲解&#xff1a;列表初始化。 下文预告&#xff1a;右值引用和移动语义 C98中传统的{} 在c98中的{}&#xff0c;仅能初始化数组和结构体 #include<iostrea…...

Linux:基础IO---动静态库

文章目录 1. 动静态库前置知识1.1 动静态库知识回顾1.2 什么是动静态库 2. 动静态库2.1 站在库的制作者的角度2.2 站在库的使用者的角度2.3 动态库是怎么被加载的&#xff08;原理&#xff09; 序&#xff1a;上一篇文章我们从认识到理解&#xff0c;从理解到实现场景&#xff…...

从裸仓库到GitLab全解析

Git服务器搭建与使用指南&#xff1a;从裸仓库到GitLab全解析 前言 在团队协作开发中&#xff0c;版本控制系统是必不可少的工具。虽然GitHub提供了优秀的代码托管服务&#xff0c;但企业级项目往往需要更安全的私有化部署方案。本文将手把手教你两种主流的Git服务器搭建方式…...

OzGIS:地理信息分析与处理软件

大家好&#xff0c;今天为大家介绍的软件是OzGIS&#xff1a;一款地理信息分析与处理软件。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 OzGIS官网网址为&#xff1a;https://ozgis.sourceforge.io/。 OzGIS是一款开源软件&#…...

PHP异常处理__Throwable

在 PHP 里&#xff0c;Throwable 是一个极为关键的接口&#xff0c;自 PHP 7 起被引入。它为错误和异常处理构建了一个统一的框架。下面会详细介绍 Throwable 的相关内容。 1. 基本概念 Throwable 是 Exception 和 Error 的父接口。在 PHP 7 之前&#xff0c;异常&#xff08…...

PHP异常处理__Exception类

以下是对 PHP 中 Exception 类的详细解释&#xff1a; 一、Exception 类概述 Exception 是 PHP 中所有异常类的基类。它提供了一个通用的异常处理机制&#xff0c;用于处理程序执行过程中可能出现的错误情况。当程序中出现异常时&#xff0c;可以创建 Exception 的实例并将其…...

C++中动态多态类别浅析

非抽象类继承和虚函数 #include <iostream> using namespace std;class Base { public:virtual void func() { // 虚函数&#xff0c;支持动态绑定cout << "Base::func()" << endl;} };class Derived : public Base { public:void func() overrid…...

游戏引擎学习第234天:实现基数排序

回顾并为今天的内容设定背景 我们今天继续进行排序的相关&#xff0c;虽然基本已经完成了&#xff0c;但还是想收尾一下&#xff0c;让整个流程更完整。其实这次排序只是个借口&#xff0c;主要是想顺便聊一聊一些计算机科学的知识点&#xff0c;这些内容在我们项目中平时不会…...

系分架构论文《论高并发场景的架构设计和开发方法》

系统分析师论文范文系列 【摘要】 2022年8月&#xff0c;我司承接了某知名电商平台“秒杀系统架构优化”项目&#xff0c;我作为系统分析师主导了整体架构设计与技术选型工作。该平台在促销活动中面临瞬时流量超过50万QPS的挑战&#xff0c;原有架构存在数据库崩溃、服务响应延…...

最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析

点击精选&#xff0c;出现https://app.dewu.com/api/v1/h5/index/fire/index 这个请求 直接搜索sign的话不容易定位 直接搜newAdvForH5就一个&#xff0c;进去再搜sign&#xff0c;打上断点 可以看到t.params就是没有sign的请求参数&#xff0c; 经过Object(a.default)该函数…...

jangow靶机笔记(Vulnhub)

环境准备&#xff1a; 靶机下载地址&#xff1a; https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova kali地址&#xff1a;192.168.144.128 靶机&#xff08;jangow&#xff09;地址&#xff1a;192.168.144.180 一.信息收集 1.主机探测 使用arp-scan进行主机探…...

Spring Boot + Caffeine:打造高性能缓存解决方案

1. 引言 1.1 缓存的重要性 缓存是提升系统性能的关键技术之一,通过将频繁访问的数据存储在内存中,减少对数据库或其他外部系统的访问次数,从而降低延迟并提高吞吐量。 缓存的基本概念:缓存是一种临时存储机制,用于快速访问常用数据。缓存在提升系统性能中的作用:减少数…...

C++入门小馆: 深入string类

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...