第十三章:约束
第十三章:约束
13.1:约束(constraint
)概述
-
为什么需要约束
数据完整性(
Data Integrity
)是指数据的精确性(Accuracy
)和可靠性(Reliability
)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。为了保证数据的完整性,
SQL
规范以约束的方式对表数据进行额外的条件限制。- 实体完整性(
Entity Integrity
) - 域完整性(
Domain Integrity
) - 引用完整性(
Referential Integrity
) - 用户自定义完整性(
User-defined Integrity
)
- 实体完整性(
-
什么是约束
约束是表级的强制规定。可以在创建表时规定约束(通过
CREATE TABLE
语句),或者在表创建之后通过ALTER TABLE
语句规定约束。 -
约束的分类
-
根据约束数据列的限制
- 单列约束:每个约束只约束一列
- 多列约束:每个约束可约束多列数据
-
根据约束的作用范围
- 列级约束:只能作用在一个列上,跟在列的定义后面。
- 表级约束:可以作用在多个列上,不与列一起,而是单独定义。
位置 支持的约束类型 是否可以起约束名 列级约束 列的后面 语法都支持,但外键没有效果 不可以 表级约束 所有列的下面 默认和非空不支持,其他支持 可以(主键没有效果) -
根据约束起的作用
NOT NULL
:非空约束,规定某个字段不能为空UNIQUE
:唯一约束,规定某个字段在整个表中唯一的PRIMARY KEY
:主键(非空且唯一)约束FOREIGN KEY
:外键约束CHECK
:检查约束DEFAULT
:默认值约束
-
13.2:非空约束
-
作用
限定某个字段/某列的值不允许为空。
-
关键字
NOT NULL
-
特点
- 默认,所有的类型的值都可以是
NULL
,包括INT
、FLOAT
等数据类型。 - 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空。
- 一个表可以有很多列都分别限定了非空。
- 空字符串"不等于
NULL
,0也不等于NULL
"。
- 默认,所有的类型的值都可以是
-
添加非空约束
# 建表时 CREATE TABLE test1( id INT NOT NULL, last_name VARCHAR(15) NOT NULL, email VARCHAR(25), salary DECIMAL(10, 2) );#建表后 ALTER TABLE test1 MODIFY email VARCHAR(25) NOT NULL;
-
删除非空约束
ALTER TABLE test1 MODIFY email VARCHAR(25) NULL;
13.3:唯一约束
-
作用
用来限制某个字段/某列的值不能重复。【允许出现多个空值:
NULL
】 -
关键字
UNIQUE
-
特点
- 同一个表可以有多个唯一约束。
- 唯一约束可以是某一列的值唯一,也可以多个列组合的值唯一。
- 唯一性约束允许列值为空。
- 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
MYSQL
会给唯一约束的列上默认创建一个唯一索引。
-
添加唯一约束
-
键表时添加
CREATE TABLE test2( id INT UNIQUE, # 列级约束 last_name VARCHAR(15), email VARCHAR(25), salary DECIMAL(10, 2), #表级约束 CONSTRAINT uk_test2_email UNIQUE(email) );
-
建表后指定唯一约束
#方式1: ALTER TABLE test2 ADD CONSTRAINT uk_test2_sal UNIQUE(salary); #方式2: ALTER TABLE test2 MODIFY last_name VARCHAR(15) UNIQUE;
-
-
复合唯一约束
CREATE TABLE USER( id INT, `name` VARCHAR(15), `password` VARCHAR(25), #表级约束 CONSTRAINT uk_user_name_pwd UNIQUE(`name`, `password`) );
-
删除唯一约束
- 添加唯一性约束的列上也会自动创建唯一索引。
- 删除唯一约束只能通过删除唯一索引的方式删除。
- 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
- 如果创建唯一约束时并未指定名称,如果是单列,就默认和列名相同,如果是组合列,那么默认和()中排在第一个的列名相同。也可以自定义唯一性约束名。
ALTER TABLE test2 DROP INDEX last_name;ALTER TABLE test2 DROP INDEX uk_test2_sal;
13.4:PRIMARY KEY
约束
-
作用
用来唯一标识表中的一行记录。
-
关键字
primary key
-
特点
- 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
- 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
- 主键约束对应着表中的一列或者多列(复合主键)。
- 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
MySQL
的主键名是PRIMARY
,就算自己命名了主键约束名也没用。- 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就会自动删除了。
- 注意:不要修改主键字段的值。修改了主键的值,可能会破坏数据的完整性。
-
添加主键约束
-
键表时指定主键约束
# 方式一 CREATE TABLE test4( id INT PRIMARY KEY, last_name VARCHAR(15), salary DECIMAL(10, 2), email VARCHAR(25) );# 方式二 CREATE TABLE test5( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2), email VARCHAR(25), CONSTRAINT pk_test5_id PRIMARY KEY(id) #没有必要起名字 );
-
建表后添加主键约束
CREATE TABLE test6( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2), email VARCHAR(25) );ALTER TABLE test6 ADD PRIMARY KEY(id);
-
-
复合主键
CREATE TABLE user1( id INT, NAME VARCHAR(15), PASSWORD VARCHAR(25), PRIMARY KEY (NAME, PASSWORD) );
-
删除主键约束
ALTER TABLE test6 DROP PRIMARY KEY;
13.5:自增列
-
作用
某个字段的值自增。
-
关键字
atuo_increment
-
特点和要求
- 一个表最多只能有一个自增长列。
- 当需要产生唯一标识或顺序值时,可设置自增长。
- 自增长列约束的列必须是键列(主键列,唯一键列)。
- 自增约束的列的数据类型必须是整数类型。
- 如果自增列指定了0和
null
,会在当前最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值。
-
指定自增约束
-
建表是指定自增列
CREATE TABLE test7( id INT PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(15) );
-
建表后指定自增长列
CREATE TABLE test8( id INT PRIMARY KEY, last_name VARCHAR(15) );ALTER TABLE test8 MODIFY id INT AUTO_INCREMENT;
-
-
删除自增约束
ALTER TABLE test8 MODIFY id INT;
-
MySQL 8.0
新特性-自增变量的持久化 在
MySQL 8.0
之前,自增主键AUTO_INCREMENT
的值如果大于max(primary key) + 1
,在MySQL
重启后,会重置AUTO_INCREMENT=max(primary key) + 1
,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。 在
MySQL 5.7
系统中,对于自增主键的分配规则,是由InnoDB
数据字典内部一个计数器来决定的,而该计数器只在内存中维护,并不会持久到磁盘中。当数据库重启时,该计数器会被初始化。
MySQL 8.0
将自增主键的计数器持久化到重做日志中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB
会根据重做日志中的信息来初始化计数器的内存值。
13.6:FOREIGN KEY约束
-
作用
限定某个表的某个字段的引用完整性。
-
关键字
FOREIGN KEY
-
主表和从表/父表和子表
- 主表(父表):被引用的表,被参考的表。
- 从表(子表):引用别人的表,参考别人的表。
-
特点
- 从表的外键列,必须引用/参考主表的主键或唯一约束的列。
- 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名,也可以指定外键约束名。
- 创建(
CREATE
)表时看指定外键约束的话,先创建主表,在创建从表。 - 删除表时,先删从表(或先删除外键约束),在删除主表。
- 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据。
- 在"从表"中指定外键约束,并且一个表可以建立多个外键约束。
- 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致。如果类型不一样,创建子表时,就会出现错误
ERROR 1005(HY000): Can't create table'database.tablename'(errno: 150)
。 - 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引。但是索引名是外键的约束名。
- 删除外键约束后,必须手动删除对应的索引。
-
添加外键约束
-
建表时添加外键约束
#①先创建主表 CREATE TABLE dept1( dept_id INT PRIMARY KEY, dept_name VARCHAR(15) ); #②再创建从表 CREATE TABLE emp1( emp_id INT PRIMARY KEY AUTO_INCREMENT, emp_name VARCHAR(15), department_id INT,CONSTRAINT fk_emp1_dept_id FOREIGN KEY (department_id) REFERENCES dept1(dept_id) );
-
建表后添加外键约束
CREATE TABLE dept2( dept_id INT PRIMARY KEY, dept_name VARCHAR(15) );CREATE TABLE emp2( emp_id INT PRIMARY KEY AUTO_INCREMENT, emp_name VARCHAR(15), department_id INT );ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept_id FOREIGN KEY(department_id) REFERENCES dept2(dept_id);
-
-
约束等级
Cascade
方式:在父表上update/delete
记录时,同步update/delete
掉子表的匹配记录。Set null
方式:在父表上update/delete
记录时,将子表上匹配记录的列设为null
,但是要注意子表的外键列不能为not null
。No action
方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete
操作。Restrict
方式:同no action
,都是立即检查外键约束。Set default
方式:(在可视化工具SQLyog
中可能显示空白):父表有变更时,子表将外键列设置成一个默认的值,但Innodb
不能识别。
如果没有指定等级,就相当于
Restrict
方式。对于外键约束,最好是采用:ON UPDATE CASCADE ON DELETE RESTRICT
的方式。CREATE TABLE dept( did INT PRIMARY KEY, #部门编号 dname VARCHAR(50) #部门名称 );CREATE TABLE emp( eid INT PRIMARY KEY, #员工编号 ename VARCHAR(5), #员工姓名 deptid INT, #员工所在的部门 #把修改操作设置为级联修改等级,把删除操作设置为set null等级 FOREIGN KEY (deptid) REFERENCES dept(did) ON UPDATE CASCADE ON DELETE SET NULL );INSERT INTO dept VALUES(1001, '教学部'); INSERT INTO dept VALUES(1002, '财务部'); INSERT INTO dept VALUES(1003, '咨询部');INSERT INTO emp VALUES(1, '张三', 1001); #在添加这条记录时,要求部门表有1001部门 INSERT INTO emp VALUES(2, '李四', 1001); INSERT INTO emp VALUES(3, '王五', 1002);UPDATE dept SET did = 1004 WHERE did = 1002;DELETE FROM dept WHERE did = 1004;SELECT * FROM dept; SELECT * FROM emp;/* dept表 +--------+------------+ | did | dname | +--------+------------+ | 1001 | 教学部 | +--------+------------+ | 1003 | 咨询部 | +--------+------------+ *//* emp表 +--------+------------+------------+ | eid | ename | deptid | +--------+------------+------------+ | 1 | 张三 | 1001 | +--------+------------+------------+ | 2 | 李四 | 1001 | +--------+------------+------------+ | 3 | 王五 | null | +--------+------------+------------+ */
-
删除外键约束
ALTER TABLE emp1 DROP FOREIGN KEY fk_emp1_dept_id;
-
开发中应用场景
-
如果两个表之间有关系(一对一、一对多),他们之间是否一定要建外键约束?
不是。
-
建和不建外键约束有什么区别?
建外键约束,你的操作(创建表、删除表、添加、修改、删除)会受到限制,从语法层面受到限制。
不建外键约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的引用完整性,只能依靠程序员的自觉,或者是在
Java
程序中进行限定。 -
那么建和不建外建约束和查询有没有关系?
没有。
-
说明
在
MySQL
里,外建约束是有成本的,需要消耗系统资源。对于大并发的SQL
操作,有可能会不适合。比如大型网站的中央数据库,可能会因为外建约束的系统开销而变得非常慢。所以,MySQL
允许你不使用系统自带的外键约束,在应用层面完成检查数据的一致性的逻辑。也就是说,即使你不用外键约束,也要想办法通过应用层面的附加逻辑,来实现外键约束的功能,确保数据的一致性。 -
阿里开发规范
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
-
13.7:CHECK约束
-
作用
检查某个字段的值是否符合要求,一般指的是值的范围。
-
关键字
CHECK
-
说明:
MySQL 5.7
不支持
MySQL 5.7
可以使用check
约束,但check
约束对数据验证没有任何作用。添加数据时,没有任何错误或警告。但是**MySQL 8.0
中可以使用check
约束了**。CREATE TABLE test10( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2) CHECK(salary > 2000) );INSERT INTO test10 VALUES(1, 'Tom', 2500);#添加失败 INSERT INTO test10 VALUES(2, 'Tom1', 1500);SELECT * FROM test10;/* test10表 +--------+------------+------------+ | id | last_name | salary | +--------+------------+------------+ | 1 | Tom | 2500.00 | +--------+------------+------------+ */
13.8:DEFAULT约束
-
作用
给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显示赋值,则赋值为默认值。
-
关键字
DEFAULT
-
字段加默认值
-
建表时添加默认值
CREATE TABLE test11( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2) DEFAULT 2000 );
-
建表后添加默认值
CREATE TABLE test12( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2) );ALTER TABLE test12 MODIFY salary DECIMAL(8, 2) DEFAULT 2500;
-
-
删除默认值约束
ALTER TABLE test12 MODIFY salary DECIMAL(8, 2);
相关文章:
第十三章:约束
第十三章:约束 13.1:约束(constraint)概述 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为…...

M.2 SSD接口详解
一、M.2简介 M.2接口是一种新的主机接口方案,可以兼容多种通信协议,如sata、PCIe、USB、HSIC、UART、SMBus等。 M.2接口是为超极本(Ultrabook)量身定做的新一代接口标准,以取代原来的mSATA接口。无论是更小巧的规格尺…...

在本地Windows 11 系统的桌面版Docker上搭建PlantUML
文章目录 在本地Windows系统的桌面版Docker上搭建PlantUML简介步骤步骤 1:安装Docker Desktop步骤 2:启动Docker Desktop步骤 3:拉取PlantUML镜像步骤 4:运行PlantUML容器步骤 5:访问PlantUML Web界面 结论参考资料 结…...
mysql的sql_mode模式
1、sql_mode是MySQL中的一个系统变量,用于设置服务器在执行SQL语句时的行为模式。它可以控制服务器的严格性和特性,包括数据校验、日期处理、空值处理等。 下面是一些常见的sql_mode模式及其作用: STRICT_ALL_TABLES:为所有存储…...

chatgpt赋能python:Python编程必备之OpenCV库下载与安装
Python编程必备之OpenCV库下载与安装 作为目前最热门的计算机视觉库之一,OpenCV在人工智能领域中发挥着巨大的作用。而Python作为一门强大的编程语言,在OpenCV的使用上也有其独特的优势。本文将介绍Python如何下载和安装OpenCV库,以及如何引…...

sparkSQL的使用
sparksql只能处理结构化数据 基于rdd构建dataframe对象 from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StringType, IntegerTypeif __name__ __main__:spark SparkSession.builder.appName(test).master(local[*]).getOrCreate()sc spa…...
gitignore的语法
.gitignore 文件是用来告诉 Git 哪些文件或目录不应该被跟踪的。下面是一些常见的 .gitignore 文件语法规则: 空行或以#开头的行将被 Git 忽略,可以用作注释。 星号 * 代表零个或多个任意字符。例如, *.txt 会匹配所有的 .txt 文件。 问号 ? 代表一个…...
长袋除尘器
长袋低压脉冲除尘器是具有先进水平的高效袋式除尘设备,是一种处理风量大、清灰效果好、除尘效率高、运行可靠、维护方便、占地面积小的大型除尘设备。 工作机理 1、过滤原理: 长袋低压脉冲除尘器含尘气体由进风口进入,经过灰斗时,气体中部分大颗粒粉尘…...

HTML+CSS实训——Day02——仿一个网易云音乐的登陆界面
仓库链接:https://github.com/MengFanjun020906/HTML_SX 前言 今天要继续完成我们的音乐软件了,昨天写完了封面,今天该完成开屏广告和登陆界面了。 登陆界面代码 <!DOCTYPE html> <html lang"en"> <head><meta charse…...

css蓝桥杯--电影院排座位
目录 一、介绍二、准备三、⽬标四、代码五、知识点六、完成 一、介绍 随着⼈们⽣活⽔平的⽇益提升,电影院成为了越来越多的⼈休闲娱乐,周末放松的好去处。各个城市的电影院数量也随着市场的需求逐年攀升。近⽇,⼜有⼀个电影院正在做着开张前…...

c++学习——多态
多态 **多态的语法****多态的底层原理图****多态案1——计算机类****纯虚函数和抽象类****多态案例2——饮品****虚析构和纯虚析构****多态案例3—— 电脑组装** 多态是C面向对象三大特性之一 多态分为两类 静态多态:函数重载和运算符重载属于静态多态,复用函数名 动…...
Java SPI机制及原理详解
前言 Java SPI (Service Provider Interface) 是一种重要的组件化方式,它可以让程序在运行时动态地装载一些实现模块,从而增强程序的可扩展性和灵活性。本文将详细介绍 Java SPI 的基本概念、原理以及使用方法。 1. 什么是Java SPI Java SPI 是一种标准…...

不压缩打包layui
手动打包 下载layui源码(当前版本2.6.4),并解压缩 下载地址:layui gitee 安装nodejs(v10.24.1) 下载链接 windows-x64 安装cnpm npm install -g cnpm -registryhttps://registry.npm.taobao.org全局安…...
过去、现在及未来
人生最邪恶的地方在于,只能年轻一次 回顾下我毫无规划的,且已经消耗掉的青春 一:过去 19岁,进入大学,兼职、玩儿、暧昧 20-21岁,初创软件公司打杂、恋爱、暧昧 22、23、24岁,上海ÿ…...

leetcode701. 二叉搜索树中的插入操作(java)
二叉搜索树中的插入操作 leetcode701. 二叉搜索树中的插入操作题目描述 递归解题解题思路代码演示 二叉树专题 leetcode701. 二叉搜索树中的插入操作 原题链接: 来源:力扣(LeetCode) 链接:https://leetcode.cn/problem…...
Docker的容器管理操作
1、创建容器 容器创建:就是将镜像加载到容器的过程。 创建容器时如果没有指定容器名称,系统会自动创建一个名称。 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。 docker create创建的容器…...

计算机组成原理——中央处理器
文章目录 **一 CPU的功能和基本结构****1 CPU的功能****2 [基本结构](http://t.csdn.cn/bpCt3)****2.1 运算器****2.2 控制器** **二 指令执行过程****1 指令周期****2 指令周期的数据流****2.1 取指周期****2.2 间址周期****2.3 执行周期****2.4 中断周期** **3 指令的执行方案…...
tidb变更大小写敏感问题的总结
作者: sustyle 原文来源: https://tidb.net/blog/2a72bc13 1 背景 近期,我们线上的tidb集群就遇到一个变更忽略大小写的需求,本来以为一个改表工单就解决了,但是业务反馈工单完成后,大小写仍旧敏感&…...

法规标准-UN R158标准解读
UN R158是做什么的? UN R158全名为针对驾驶员识别车辆后方弱势道路使用者,联合国对倒车系统和机动车的统一规定,该法规涉及批准倒车和机动车辆的装置,主要为保证倒车时避免碰撞,方便驾驶员观察了解车辆后部人员和物体…...

160个CrackMe之002
这道题就很简单 有了第一道题目的支持 我们就能做 首先 我们先要下载Msvbvm50.dll Msvbvm50.dll下载_Msvbvm50.dll最新版下载[修复系统丢失文件]-下载之家 然后我们可以运行程序了 比之前那个还简单 就是输入 然后比对 报错或者成功 开始逆向分析 先去常量中进行查找 找…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...