MySQL修炼手册8:约束与完整性:保证数据的一致性
目录
- 写在开头
- 1 主键与唯一键约束
- 1.1 PRIMARY KEY约束的作用
- 1.2 主键的复合使用
- 1.3 主键的修改与删除
- 1.4 UNIQUE约束的应用场景
- 1.5 主键与唯一键约束的性能影响
- 1.6 主键的自动增长
- 1.7 主键的最佳实践
- 1.8 独特性与业务需求
- 1.9 避免过度使用唯一约束
- 1.10 主键与唯一键的关系
- 2 外键约束
- 2.1 FOREIGN KEY约束的使用
- 2.2 处理外键关联的数据更新和删除
- 2.2.1 CASCADE
- 2.2.2 SET NULL
- 2.2.3 NO ACTION 和 RESTRICT
- 2.2.4 SET DEFAULT
- 2.3 多表级联操作
- 2.4 综合实例
- 2.5 外键约束的性能考虑
- 2.6 动态添加与移除外键约束
- 2.7 外键约束与索引
- 2.8 外键约束的最佳实践
- 3 CHECK约束
- 3.1 CHECK约束的基本概念
- 3.2 使用CHECK约束保障数据合法性
- 3.2.1 确保数值范围
- 3.2.2 确保字符串符合特定格式
- 3.2.3 确保日期符合特定范围
- 3.2.4 多条件组合
- 3.2.5 使用逻辑运算符
- 3.2.6 使用函数
- 3.2.7 确保唯一组合
- 写在最后
写在开头
在数据库设计和管理中,保证数据的完整性和一致性是至关重要的。MySQL通过不同类型的约束来实现这一目标。约束用于限制存储在表中的数据类型,保证数据的准确性和可靠性。本文将深入探讨MySQL中最常用的几种约束:主键(PRIMARY KEY)、唯一键(UNIQUE)、外键(FOREIGN KEY)和检查(CHECK)约束。了解这些约束的使用方法和应用场景,对于创建稳定和高效的数据库至关重要。
1 主键与唯一键约束
1.1 PRIMARY KEY约束的作用
主键约束是数据库表中的核心约束之一,用于唯一标识表中的每一行。在MySQL中,主键约束具有以下特点:
- 唯一性:保证列中的每个值都是唯一的。
- 非空性:主键列不能有NULL值。
- 索引:MySQL会自动为主键列创建索引,优化查询性能。
例如,创建一个具有主键约束的学生表:
CREATE TABLE Students (StudentID int NOT NULL,StudentName varchar(255) NOT NULL,PRIMARY KEY (StudentID)
);
1.2 主键的复合使用
主键不仅可以是单个列,也可以是多个列的组合,称为复合主键。在复合主键中,每个列的组合必须是唯一的。
例如,如果一个课程注册表同时需要学生ID和课程ID来唯一确定一条记录:
CREATE TABLE CourseRegistrations (StudentID int NOT NULL,CourseID int NOT NULL,RegistrationDate date NOT NULL,PRIMARY KEY (StudentID, CourseID)
);
1.3 主键的修改与删除
-
修改主键:在实际使用中,修改主键是一种需要谨慎进行的操作。你可以通过ALTER TABLE命令来修改主键。
ALTER TABLE Students DROP PRIMARY KEY; ALTER TABLE Students ADD PRIMARY KEY (NewColumn);
-
删除主键:有时可能需要删除主键约束。这可以通过ALTER TABLE命令实现。
ALTER TABLE Students DROP PRIMARY KEY;
1.4 UNIQUE约束的应用场景
唯一约束确保指定列中的所有值都是不同的。与主键不同,唯一约束允许值为NULL。这在需要确保如电子邮件地址或用户名等属性的唯一性时特别有用。
-
创建唯一约束:
CREATE TABLE Users (UserID int NOT NULL,Username varchar(255) NOT NULL,Email varchar(255),UNIQUE (Email) );
-
添加唯一约束:已经存在的表可以添加唯一约束。
ALTER TABLE Users ADD UNIQUE (Username);
-
复合唯一键:与复合主键类似,可以定义多列组合的唯一约束,确保这些列的组合值唯一。
CREATE TABLE Reservations (GuestID int NOT NULL,RoomID int NOT NULL,ReservationDate date NOT NULL,UNIQUE (GuestID, ReservationDate) );
-
删除唯一约束:如果需要,可以从表中删除唯一约束。
ALTER TABLE Users DROP INDEX Email;
-
唯一约束与NULL值:唯一约束允许多个NULL值,因为在SQL中,NULL被认为与任何其他值(包括另一个NULL)都不相等。
1.5 主键与唯一键约束的性能影响
-
性能优化:由于主键和唯一键自动创建索引,它们可以显著提高查询的速度。特别是在大型数据集中,合理设置主键和唯一键可以极大地优化数据检索的性能。
-
考虑选择合适的主键:选择短且意义明确的字段作为主键可以提高性能。例如,整数类型的ID通常是一个好选择,因为它们比字符串类型占用更少的空间,并且在比较时更快。
1.6 主键的自动增长
-
AUTO_INCREMENT:在MySQL中,主键字段经常设置为自动增长(AUTO_INCREMENT)。这意味着当新行被插入表中时,主键字段会自动设置为一个唯一的数值。
CREATE TABLE Orders (OrderID int NOT NULL AUTO_INCREMENT,OrderDate date NOT NULL,PRIMARY KEY (OrderID) );
这在创建具有唯一标识符需求的表时非常有用,例如订单、票据等。
1.7 主键的最佳实践
- 尽量使用简单的主键:复杂的或多列的主键可能会使数据关联和查询变得复杂,尤其是在涉及多个表的JOIN操作时。
- 避免使用敏感数据:作为主键的数据将在多个地方引用,因此避免使用可能被视为敏感的数据(如社会安全号码)。
1.8 独特性与业务需求
- 主键与业务逻辑:选择主键时,考虑是否反映了业务逻辑。例如,在员工数据库中,员工号可能是一个自然的选择。
- 唯一键与数据规范:唯一键不仅是保证数据唯一性的工具,也是数据规范和完整性的重要部分。例如,防止同一电子邮件地址被多次注册。
通过这些细节的考虑,主键和唯一键约束不仅作为数据完整性的守护者,还能够优化数据库的性能和响应
时间。在数据库设计阶段,合理的规划主键和唯一键约束对于长期维护和扩展数据库系统至关重要。这要求数据库设计者不仅考虑当前的需求,还要预见未来可能的变化和扩展。
1.9 避免过度使用唯一约束
- 性能考虑:虽然唯一约束有助于保持数据的准确性,但过度使用可能会影响性能。每个唯一约束都需要额外的存储空间和处理时间来维护索引。
- 选择合适的字段:在为表设置唯一约束时,应该仔细考虑哪些字段确实需要这种级别的数据完整性保护。例如,用户的电子邮件地址可能需要唯一约束,但他们的姓名则不需要。
1.10 主键与唯一键的关系
- 互补使用:虽然主键和唯一键有相似的作用,但它们通常用于不同的目的。主键用于唯一标识每条记录,而唯一键用于保证特定字段的独特性。
- 业务和逻辑需求:根据业务和逻辑需求,可以灵活地组合使用主键和唯一键来达到既定的数据模型要求。
通过深入了解和正确应用主键和唯一键约束,数据库设计者和开发者可以创建出既高效又可靠的数据存储解决方案。这不仅有助于提高数据的质量和准确性,还可以保证数据的安全性和一致性,从而为用户提供更好的体验和服务。在实际应用中,恰当的使用这些约束是数据管理的基础,对于任何涉及数据存储和处理的项目来说都至关重要。
2 外键约束
外键约束(FOREIGN KEY)是数据库完整性的关键组成部分,用于在两个表之间建立链接,确保数据的一致性和准确性。以下是外键约束的一些重要用法和概念:
2.1 FOREIGN KEY约束的使用
当在一个表中定义了外键,它创建了一个指向另一个表主键或唯一键的引用。这种关系确保了引用表中的数据在被引用表中有相应的匹配记录。
例如,有两个表:Students
和Orders
。Students
表有一个主键StudentID
,而Orders
表包含一个指向Students
表StudentID
的外键:
CREATE TABLE Students (StudentID int NOT NULL,StudentName varchar(255),PRIMARY KEY (StudentID)
);CREATE TABLE Orders (OrderID int NOT NULL,StudentID int,OrderDetail varchar(255),PRIMARY KEY (OrderID),FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
在此例中,Orders
表中的StudentID
必须在Students
表中存在。
2.2 处理外键关联的数据更新和删除
在外键约束中,主要关注的是当被引用的数据发生变化时,如何处理引用该数据的表。以下是几种处理方式:
2.2.1 CASCADE
CASCADE
操作会在父表(被引用表)上执行的更新或删除操作同步到子表(引用表)。这意味着如果一个父表的行被更新或删除,所有引用该行的子表行也会相应地更新或删除。
FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE CASCADE ON UPDATE CASCADE
2.2.2 SET NULL
SET NULL
操作在父表中的记录被删除或更新时,会将子表中引用该记录的字段自动设置为NULL
。这适用于非强制性的关系,其中子表可以继续存在,即使其引用的父表数据被移除。
FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE SET NULL ON UPDATE SET NULL
这个设置要求子表中的对应字段必须允许NULL
值。
2.2.3 NO ACTION 和 RESTRICT
NO ACTION
和RESTRICT
实际上在行为上是相同的。当尝试删除或更新父表中的行,并且在子表中存在引用这些行的数据时,这两个选项都会拒绝删除或更新操作。它们确保子表中不会存在无效的引用。
FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE RESTRICT ON UPDATE NO ACTION
2.2.4 SET DEFAULT
SET DEFAULT
操作在父表的记录被删除或更新时,会将子表中的外键字段设置为某个默认值。这需要在子表中的外键列定义时指定默认值。
FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT
2.3 多表级联操作
外键约束也可以在多个表之间建立复杂的级联操作。例如,如果你有一个Students
表、一个Orders
表以及一个OrderDetails
表,Orders
表可以引用Students
表,而OrderDetails
表又可以引用Orders
表。这种关系允许在任一级别上进行数据更新或删除,而相应的变更会传递到所有相关的表。
2.4 综合实例
创建一个具有外键约束和级联行为的复杂数据库结构,可以更全面地理解这些概念。例如,创建Students
、Courses
和Enrollments
表,其中Enrollments
表连接Students
和Courses
表,并具有相应的外键和级联规则。
CREATE TABLE Courses (CourseID int NOT NULL,CourseName varchar(255),PRIMARY KEY (CourseID)
);CREATE TABLE Enrollments (StudentID int,CourseID int,EnrollmentDate date,FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE CASCADE,FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) ON DELETE CASCADE
);
通过掌握外键约束及其各种行为,可以在数据库设计中构建更加健壮和灵活的数据模型,同时确保数据的一致性和完整性。
2.5 外键约束的性能考虑
使用外键约束时,还需要注意其对数据库性能的影响。外键检查可能会增加数据插入、更新和删除操作的成本。在高性能的系统中,有时可能选择在应用程序逻辑而非数据库级别来强制数据完整性,尤其是在处理大量交易的系统中。
2.6 动态添加与移除外键约束
在某些情况下,你可能需要在表已经创建之后添加或移除外键约束。这可以通过ALTER TABLE
命令实现:
-
添加外键约束:
ALTER TABLE Orders ADD FOREIGN KEY (StudentID) REFERENCES Students(StudentID);
-
移除外键约束:
ALTER TABLE Orders DROP FOREIGN KEY Orders_ibfk_1;
在移除外键约束时,需要指定外键的名称,这可以通过查询表的创建信息或使用SHOW CREATE TABLE
命令来获取。
2.7 外键约束与索引
在实施外键约束时,还需考虑索引的使用。为了提高性能,建议在作为外键的列上创建索引。当MySQL强制执行外键约束时,如果被引用的列(通常是主键或唯一键)和引用列都有索引,这将显著提高查询和更新操作的效率。
-
自动索引创建:在某些情况下,当你为一个列添加外键约束时,MySQL会自动为该列创建索引。但这并不总是发生,取决于具体的数据库版本和设置。
-
手动添加索引:如果自动索引创建未发生,或者你需要更精细地控制索引的类型和性能,可以手动添加索引。例如,为
Orders
表中的StudentID
列添加索引:CREATE INDEX idx_student_id ON Orders (StudentID);
2.8 外键约束的最佳实践
在实际应用中,合理使用外键约束可以带来许多好处,但也要注意避免过度使用,因为它们可能会影响数据库的性能和灵活性:
-
谨慎使用外键:对于核心业务逻辑至关重要的数据完整性保护,应使用外键。但在某些情况下,特别是对于大规模的、高频写入的数据库系统,应考虑通过应用逻辑来维护数据完整性。
-
避免复杂的级联操作:虽然级联更新和删除操作可以简化某些数据库维护任务,但在复杂的数据库架构中,过度使用级联可能会导致不可预测的结果和性能瓶颈。
-
定期审查外键约束:随着业务的发展,某些外键约束可能变得不再适用或不必要。定期审查并调整这些约束可以保证数据库架构与业务需求保持一致。
3 CHECK约束
3.1 CHECK约束的基本概念
CHECK
约束是MySQL中用于确保表中特定列的数据符合特定条件的功能。它在数据插入或更新时自动执行,如果数据不符合定义的条件,操作将被拒绝。CHECK
约束提高了数据的完整性和质量,避免了无效或不合适的数据进入数据库。
3.2 使用CHECK约束保障数据合法性
3.2.1 确保数值范围
例如,限制年龄字段必须在1到100之间:
CHECK (Age BETWEEN 1 AND 100)
3.2.2 确保字符串符合特定格式
如果需要确保某个字符串字段遵循特定格式,例如,一个国家代码必须是两个大写字母:
CHECK (CountryCode REGEXP '^[A-Z]{2}$')
3.2.3 确保日期符合特定范围
限制日期字段必须在特定日期之后:
CHECK (StartDate > '2024-01-01')
3.2.4 多条件组合
可以在一个CHECK
约束中组合多个条件。例如,确保一个薪水字段既不是负数也不是过高的数值:
CHECK (Salary >= 0 AND Salary <= 100000)
3.2.5 使用逻辑运算符
使用AND、OR和NOT等逻辑运算符来创建更复杂的条件。例如,确保员工的状态是活动的或者,如果不活动,终止日期必须存在:
CHECK ((IsActive = 1) OR (IsActive = 0 AND TerminationDate IS NOT NULL))
3.2.6 使用函数
在CHECK
约束中使用函数来验证数据。例如,确保某个字符串字段是一个有效的电子邮件地址:
CHECK (Email LIKE '%_@__%.__%')
3.2.7 确保唯一组合
虽然UNIQUE
约束通常用于这个目的,但在某些情况下,CHECK
约束可以用来确保字段的组合是唯一的。例如:
CHECK (NOT EXISTS (SELECT * FROM table WHERE column1=value1 AND column2=value2))
写在最后
在数据库设计和数据维护过程中,合理使用各种约束至关重要。它们不仅帮助维护数据的一致性和完整性,还能在某种程度上提高数据库操作的效率。理解并正确应用这些约束,可以使你的数据库更加健壯和可靠。无论是设计一个新的数据库还是优化现有的数据库,掌握MySQL中的约束都是任何数据库管理员或开发者的基本技能。
相关文章:
MySQL修炼手册8:约束与完整性:保证数据的一致性
目录 写在开头1 主键与唯一键约束1.1 PRIMARY KEY约束的作用1.2 主键的复合使用1.3 主键的修改与删除1.4 UNIQUE约束的应用场景1.5 主键与唯一键约束的性能影响1.6 主键的自动增长1.7 主键的最佳实践1.8 独特性与业务需求1.9 避免过度使用唯一约束1.10 主键与唯一键的关系 2 外…...
React入门 - 03(初识 React 组件和 JSX)
本章内容 目录 1.初识 React 组件2.关于 JSX 继上一节的工程案例,我们这一节主要了解一下 React组件和 “JSX 语法”。 前置知识点:ES6模块化&继承 1.初识 React 组件 1、打开 src/index.js文件(项目的入口文件)内容&…...

华为OD机试 - 反射计数(Java JS Python C)
题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体经过 0 还是 1,都不影响其速度。 请计算并给出经过 t 时间单位后,物体经过 1 点的次数。 矩阵以左…...

Linux系统中使用systemctl命令控制软件的启动和关闭
Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启 能够被systemctl管理的软件,一般也称之为:服务 1.功能和语法 功能:控制系统服务的启动关闭等 语法:syst…...

2024年01月微软更新Bug 已解决 !Explorer.EXE 提示:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。
前倾概要 近期大量出现如上图问题,杀毒,系统急救箱都没反应,罪魁祸首就是微软更新! 点击什么都是:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 但软件使用正常,还能通过建立…...

Qt/QML编程学习之心得:slider(34)
滑条slider,有时也成为进度条progressbar,在GUI界面中也是经常用到的。 import QtQuick 2.9 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.2ApplicationWindow {id:rootvisible: truewidth: 1920height: 720//title: qsTr("Hello World&q…...

使用metricbeat 监控多ES集群
背景 ES 本身自带 监控,属于xpack 中的内容,为商业版,需要收费; 并且 monitor 功能必须要在security开启后才能使用,还有就是集群监控自己,将采集到的性能数据保存到本集群,这是一个比较差的设…...

阿里云服务器+宝塔 (尝试部署一个最简单的静态页面)
1. 免费白嫖一个阿里服务器 进入网址:服务器购买地址 选择预装宝塔面板 购买完成后前往控制台 查看当前实例 设置或修改密码 设置用户名和密码 2. 远程连接到服务器 2.1. 使用Workbench连接 输入用户名和密码连接成功页面如下: 2.2. 使…...

每日一题——LeetCode1160.拼写单词
方法一 个人方法: 先统计chars里每个字符出现的次数,再对words里每个字符串统计每个字符出现的字符,当: 1、字符串里出现chars里没有的字符 2、字符串里某个字符出现的次数大于该字符在chars里出现的次数 以上两种情况则不符合…...

物联网协议Coap之Core和NetWork简介
目录 前言 一、Coap的Core包 1、Coap对象 2、Message对象 3、Request对象 4、Response对象 二、Coap的NetWork调试 1、UDP运行模式 2、Network消息接收 3、Sender线程发送数据 三、总结 前言 在之前的博文中,对Californium中Coap的实现进行了简要的介绍&a…...

Java SE入门及基础(10)
switch选择结构 1. 概念 switch 表示开关的意思,为了帮助理解,下面以线路为例,进行解释说明 上图中表示一条带有多个开关的线路,当开关打开时,该开关所控制的灯即被点亮。 2. 语法规则 switch ( 表达式 ){ //…...

Docker五部曲之二:Docker引擎
文章目录 前言Docker引擎镜像管理容器管理容器运行前台运行和后台运行容器识别重启策略清除 容器日志 数据管理卷挂载创建和管理卷启动带有卷的容器通过Docker Compose使用卷使用只读卷备份、恢复和迁移卷 绑定挂载用绑定挂载启动一个容器Docker Compose使用绑定挂载使用只读绑…...
简单说一下原型与原型链
文章目录 原型原型链 原型 简单来说原型就像是对象的 “爸爸”,每个对象都有一个原型。当你创建一个对象时,这个对象就会有一个内部链接,指向它的原型。你可以把原型想象成对象的一种模板,对象可以从中继承属性和方法。 举个例子…...

11Spring IoC注解式开发(上)(元注解/声明Bean的注解/注解的使用/负责实例化Bean的注解)
注解的存在主要是为了简化XML的配置。Spring6倡导全注解开发。 注解开发的优点:提高开发效率 注解开发的缺点:在一定程度上违背了OCP原则,使用注解的开发的前提是需求比较固定,变动较小。 1 注解的注解称为元注解 自定义一个注解: package com.sunspl…...

k8s 部署Jenkins项目
1、基于helm 部署jenkins 要求:当前集群配置了storageClass,并已指定默认的storageClass,一般情况下,创建的storageClass即为默认类 指定默认storageClass的方式 # 如果是新创建默认类: apiVersion: storage.k8s.io/v1…...
#每日一题#力扣#2085.统计出现过一次的公共字符串
给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1: 输入:words1 [“leetcode”,“is”,“amazing”,“as”,“is”], words2 [“amazing”,“leetcode”,“is”] 输出:…...
Python系列(1):简洁优雅,功能强大的编程语言
Python:简洁优雅,功能强大的编程语言 一、Python的特点二、Python的应用领域 在当今的编程世界中,Python已经成为了一种无处不在的语言。它不仅简单易学,而且功能强大,支持多种编程范式,包括面向对象编程、…...

HarmonyOS应用开发学习笔记 arkTS自定义弹窗(CustomDialog)简单使用 arkTS弹出框回调、监听
HarmonyOS应用开发学习笔记 arkTS自定义弹窗(CustomDialog)简单使用 1、CustomDialog装饰器用于装饰自定义弹框 1、定义弹出框 CustomDialog CustomDialog export struct CustomDialogExample {controller: CustomDialogControllerbuild() {Column() {…...

RabbitMQ(六)消息的持久化
目录 一、简介1.1 定义1.2 消息丢失的场景 二、交换机的持久化方式一:直接 new方式二:channel.exchangeDeclare()方式三:ExchangeBuilder【推荐】 三、队列的持久化方式一:直接 new方式二:channel.queueDeclare()方式三…...

mybatisplus配置
一、新建项目:com.saas.plusdemo 二、配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...