青少年编程与数学 02-007 PostgreSQL数据库应用 09课题、规则、约束和默认值

青少年编程与数学 02-007 PostgreSQL数据库应用 09课题、规则、约束和默认值

  • 一、规则
  • 二、规则应用示例
      • 示例1:使用规则实现视图
      • 示例2:使用规则自动填充数据
      • 示例3:使用规则实现数据的合并插入
  • 三、约束
  • 四、约束应用示例
      • 示例1:主键约束和外键约束
      • 示例2:唯一约束和非空约束
      • 示例3:检查约束
      • 示例4:默认值约束
      • 示例5:部分索引约束
  • 五、默认值
      • 默认值的主要特点:
      • 如何定义默认值:
      • 默认值的应用场景:
  • 六、关系(Relationship)
      • 示例
  • 七、一致性、完整性和可维护性

课题摘要:本课题介绍了PostgreSQL中的规则、约束和默认值,以及它们在维护数据一致性、完整性和可维护性方面的重要性。规则是数据库表操作的备用操作定义,可以由特定事件触发,并包含条件执行和替代操作。约束用于确保数据准确性和可靠性,包括主键、外键、唯一性、非空、检查和默认值等类型。默认值是在插入记录时未指定值的情况下自动填充的值。此外,还讨论了数据库关系,包括实体关系、主键和外键,以及关系类型如一对一、一对多和多对多。最后,强调了一致性、完整性和可维护性的概念,这些是数据库管理中确保数据准确性、可靠性和易管理的关键。


一、规则

在PostgreSQL中,规则(Rule)是一种强大的机制,用于在数据库表中的插入、更新或删除操作执行时定义备用的操作。规则允许在执行特定表上的特定命令时,执行额外的命令,或者用另一个命令替换原有的命令,甚至可以导致命令根本不被执行。

规则的主要特点包括:

  1. 命令转换机制:规则实际上是一个命令转换机制或命令宏,这种转换在命令执行开始之前进行。

  2. 事件触发:规则可以由SELECTINSERTUPDATEDELETE等事件触发。

  3. 条件执行:规则可以包含一个条件表达式,只有当条件满足时,规则才会被触发。

  4. 替代操作:规则定义了替代的操作,这些操作可以是SELECTINSERTUPDATEDELETE等SQL命令,或者是自定义的操作。

  5. INSTEAD和ALSO:规则可以指定INSTEADALSO来决定是在原有操作之前执行规则定义的操作,还是替代原有操作执行。

  6. 实现视图:规则用于实现SQL视图,特别是当ON SELECT规则被定义时,它允许将表转换成视图。

  7. 权限检查:规则是从属于表或视图的,规则的权限检查是基于定义规则的属主,而不是执行规则的用户。

  8. 避免循环规则:需要小心避免创建循环规则,这会导致PostgreSQL报告错误,因为规则会递归地展开。

  9. 与触发器的区别:虽然触发器和规则都可以用于数据库操作的自动化,但规则是在查询计划生成之前对查询进行重写,而触发器是在数据库操作执行之后触发的。

规则提供了一种灵活的方式来定制数据库的行为,以满足特定的业务需求,同时确保数据的一致性和可靠性。通过合理使用规则,开发人员可以实现复杂的逻辑和确保数据库中的数据完整性。

二、规则应用示例

在PostgreSQL中,规则(Rules)可以用来实现各种复杂的逻辑,比如视图的实现、数据的默认处理、复杂的数据插入逻辑等。以下是一些规则的应用示例:

示例1:使用规则实现视图

假设我们有一个orders表,我们想要创建一个视图customer_orders,它只包含每个客户的订单总数。我们可以使用规则来实现这个视图:

CREATE TABLE orders (order_id SERIAL PRIMARY KEY,customer_id INT,total_amount NUMERIC
);-- 创建一个空的视图表
CREATE TABLE customer_orders (customer_id INT,order_count INT
);-- 创建一个规则,将对customer_orders的SELECT操作转换为对orders的聚合查询
CREATE RULE customer_orders_rule ASSELECT customer_id, COUNT(*) AS order_countFROM ordersGROUP BY customer_id
ON SELECT TO customer_orders DO INSTEADSELECT * FROM customer_orders_rule;

在这个例子中,我们创建了一个空的customer_orders表和一个规则customer_orders_rule,这个规则将对customer_ordersSELECT操作转换为对orders表的聚合查询。

示例2:使用规则自动填充数据

假设我们有一个products表,我们想要自动为新插入的产品设置一个默认的库存数量:

CREATE TABLE products (product_id SERIAL PRIMARY KEY,product_name VARCHAR(255),stock_quantity INT DEFAULT 0
);-- 创建一个规则,自动为新插入的产品设置默认库存数量
CREATE RULE insert_product_rule ASON INSERT TO productsWHERE (NEW.stock_quantity IS NULL)DO INSTEADINSERT INTO products (product_name, stock_quantity)VALUES (NEW.product_name, 100);

在这个例子中,我们创建了一个规则insert_product_rule,它检查插入到products表中的新记录是否没有指定stock_quantity,如果没有,则自动设置为100。

示例3:使用规则实现数据的合并插入

假设我们有一个logs表,我们想要将两个不同的日志表login_logserror_logs的数据合并到logs表中:

CREATE TABLE login_logs (log_id SERIAL PRIMARY KEY,user_name VARCHAR(255),login_time TIMESTAMP
);CREATE TABLE error_logs (log_id SERIAL PRIMARY KEY,error_message TEXT,error_time TIMESTAMP
);CREATE TABLE logs (log_id SERIAL PRIMARY KEY,log_type VARCHAR(50),log_details TEXT,log_time TIMESTAMP
);-- 创建规则,将login_logs表的插入操作重定向到logs表
CREATE RULE login_logs_rule ASON INSERT TO login_logsDO INSTEADINSERT INTO logs (log_type, log_details, log_time)VALUES ('login', NEW.user_name, NEW.login_time);-- 创建规则,将error_logs表的插入操作重定向到logs表
CREATE RULE error_logs_rule ASON INSERT TO error_logsDO INSTEADINSERT INTO logs (log_type, log_details, log_time)VALUES ('error', NEW.error_message, NEW.error_time);

在这个例子中,我们创建了两个规则login_logs_ruleerror_logs_rule,它们将对login_logserror_logs表的插入操作重定向到logs表中,同时指定了日志类型和详细信息。

这些示例展示了规则在PostgreSQL中的灵活性和强大功能,它们可以用来实现复杂的数据操作和业务逻辑。

三、约束

在PostgreSQL中,约束(Constraints)是用于确保数据库中数据准确性和可靠性的一种机制。约束定义了表中数据必须遵守的规则,它们帮助维护数据的完整性和一致性。以下是PostgreSQL中一些常见的约束类型:

  1. 主键约束(PRIMARY KEY)

    • 确保列(或列组合)中的每个值都是唯一的,并且不为NULL。一个表只能有一个主键。
  2. 外键约束(FOREIGN KEY)

    • 用于引用另一个表中的唯一值(通常是主键),以维护表之间的关系和数据的引用完整性。
  3. 唯一约束(UNIQUE)

    • 确保列中的所有值都是唯一的,类似于主键,但允许NULL值。
  4. 非空约束(NOT NULL)

    • 确保列中的值不能为NULL。
  5. 检查约束(CHECK)

    • 确保列中的值满足特定的条件,比如数值范围或字符串模式。
  6. 默认值约束(DEFAULT)

    • 为列定义一个默认值,如果插入记录时没有指定该列的值,则自动使用默认值。
  7. 排除约束(EXCLUDE)

    • PostgreSQL的GiST和GIN索引支持的一种特殊类型的约束,用于确保列中的值在指定的表达式下是唯一的。
  8. 部分索引约束(Partial Index)

    • 只对表中满足特定条件的行创建索引,而不是整个表。

约束可以在创建表时定义,也可以在现有表上添加。以下是一些定义约束的示例:

-- 创建表时定义约束
CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,age INT CHECK (age > 0 AND age <= 120),salary DECIMAL DEFAULT 50000,department_id INT REFERENCES departments(department_id)
);-- 在现有表上添加约束
ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);ALTER TABLE employees
ADD CONSTRAINT check_age CHECK (age > 0);

在这些示例中,employees表被定义为主键为employee_idfirst_namelast_name列不能为NULL,age列有一个检查约束确保年龄在1到120岁之间,salary列有一个默认值约束,department_id列有一个外键约束引用departments表的department_id列。

约束不仅有助于防止无效数据的插入,还可以提高查询性能,因为它们可以被数据库系统用来优化查询计划。正确使用约束可以显著提高数据库的健壮性和可靠性。

四、约束应用示例

在PostgreSQL中,约束的应用示例可以帮助确保数据的完整性和准确性。以下是一些具体的应用示例:

示例1:主键约束和外键约束

-- 创建部门表
CREATE TABLE departments (department_id SERIAL PRIMARY KEY,department_name VARCHAR(255) NOT NULL
);-- 创建员工表,使用外键约束引用部门表
CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,department_id INT,CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

在这个例子中,departments表有一个主键department_id,而employees表中的department_id列通过外键约束fk_department引用了departments表的department_id列,确保每个员工记录中的部门ID在departments表中存在。

示例2:唯一约束和非空约束

CREATE TABLE users (user_id SERIAL PRIMARY KEY,username VARCHAR(50) UNIQUE NOT NULL,email VARCHAR(100) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL
);

在这个例子中,users表中的usernameemail列都有唯一约束,确保用户名和电子邮件地址不会重复,同时这两个列也有非空约束,确保在插入记录时必须提供这些值。

示例3:检查约束

CREATE TABLE products (product_id SERIAL PRIMARY KEY,product_name VARCHAR(255) NOT NULL,price NUMERIC CHECK (price > 0),quantity_in_stock INT CHECK (quantity_in_stock >= 0)
);

在这个例子中,products表中的price列有一个检查约束,确保产品价格必须大于0,quantity_in_stock列也有一个检查约束,确保库存数量不能为负数。

示例4:默认值约束

CREATE TABLE orders (order_id SERIAL PRIMARY KEY,customer_id INT NOT NULL,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,status VARCHAR(50) DEFAULT 'Pending'
);

在这个例子中,orders表中的order_date列有一个默认值约束,如果没有指定订单日期,则自动使用当前时间戳。status列也有一个默认值约束,如果没有指定状态,则默认为’Pending’。

示例5:部分索引约束

CREATE TABLE sales (sale_id SERIAL PRIMARY KEY,product_id INT NOT NULL,sale_date DATE NOT NULL,amount NUMERIC NOT NULL
);-- 创建一个部分索引,只索引当年的销售记录
CREATE INDEX idx_sales_2024 ON sales (sale_date) WHERE EXTRACT(YEAR FROM sale_date) = 2024;

在这个例子中,sales表有一个部分索引idx_sales_2024,它只索引2024年的销售记录,这样可以提高针对特定年份销售记录的查询性能。

这些示例展示了如何在PostgreSQL中使用不同类型的约束来定义和维护数据的完整性和一致性。通过合理地应用约束,可以有效地防止无效数据的插入,并提高数据库操作的效率。

五、默认值

在PostgreSQL中,默认值(Default Value)是指在插入表记录时,如果没有为某个列指定值,数据库系统将自动为该列填充的值。默认值是一种数据库约束,用于确保列中的值在没有明确提供时仍然符合预期的数据完整性和一致性要求。

默认值的主要特点:

  1. 自动填充

    • 当插入新记录时,如果未指定某列的值,且该列定义了默认值,则数据库会自动使用该默认值。
  2. 数据完整性

    • 默认值有助于保持数据的完整性,确保即使在未提供某些值的情况下,列也不会被留空。
  3. 简化数据输入

    • 对于那些经常使用相同值的列,定义默认值可以简化数据输入过程,减少错误。
  4. 提高查询性能

    • 在某些情况下,定义默认值可以提高查询性能,因为数据库系统不需要在每次插入时都检查NULL值。

如何定义默认值:

默认值可以在创建表时定义,也可以在现有表上添加。以下是定义默认值的示例:

-- 创建表时定义默认值
CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,hire_date DATE DEFAULT CURRENT_DATE,department_id INT REFERENCES departments(department_id)
);-- 在现有表上添加默认值
ALTER TABLE employees ALTER COLUMN department_id SET DEFAULT 1;

在这个例子中,employees表的hire_date列被定义为默认值为当前日期(CURRENT_DATE),这意味着如果插入新员工记录时没有指定hire_date,则会自动使用当前日期作为入职日期。department_id列也可以设置默认值,例如默认部门ID为1。

默认值的应用场景:

  • 时间戳:自动记录数据的创建或修改时间。
  • 状态字段:例如,订单状态默认为“未处理”或“待审核”。
  • 用户权限:新用户的默认权限设置。
  • 计算字段的初始值:例如,账户的初始余额。

默认值是数据库设计中的一个重要方面,它有助于自动化数据输入和维护数据的一致性。通过合理使用默认值,可以提高数据库操作的效率和准确性。

六、关系(Relationship)

在PostgreSQL中,关系(Relationship)是指两个表之间的逻辑连接,这种连接基于数据的关联性。关系用于表示不同表中的数据行如何相互关联,是关系型数据库管理系统(RDBMS)中的核心概念。以下是关系的几个关键方面:

  1. 实体关系

    • 在现实世界中,实体之间的关系可以转化为数据库中的表之间的关系。例如,一个employees表和一个departments表之间可能存在关系,因为每个员工都属于一个部门。
  2. 主键和外键

    • 表之间的关系通常是通过主键和外键来实现的。一个表的主键(Primary Key)是唯一标识该表中每条记录的字段,而另一个表的外键(Foreign Key)则引用第一个表的主键,从而建立两个表之间的关系。
  3. 关系类型

    • 一对一(One-to-One):一个表中的每条记录都与另一个表中的一条记录相关联。
    • 一对多(One-to-Many):一个表中的每条记录可以与另一个表中的多条记录相关联。
    • 多对多(Many-to-Many):两个表中的记录可以相互关联多条记录,这通常需要一个额外的关联表(有时称为“交叉引用表”或“链接表”)来实现。
  4. 参照完整性

    • 关系的建立和维护需要保证参照完整性,即外键列中的值必须在主键表中存在,或者为NULL(如果允许NULL值)。
  5. 数据查询

    • 关系使得可以通过 JOIN 操作在查询时连接多个表,从而获取相关联的数据。
  6. 数据库规范化

    • 关系有助于数据库的规范化,通过将数据分解成多个表并建立关系,可以减少数据冗余,提高数据一致性。

示例

假设有两个表:authorsbooksauthors 表包含作者的信息,books 表包含书籍的信息。这两个表可以通过一个外键在 books 表中建立关系,表示每本书都属于一个作者:

CREATE TABLE authors (author_id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL
);CREATE TABLE books (book_id SERIAL PRIMARY KEY,title VARCHAR(100) NOT NULL,author_id INT,CONSTRAINT fk_author_book FOREIGN KEY (author_id) REFERENCES authors(author_id)
);

在这个例子中,books 表中的 author_id 是一个外键,它引用了 authors 表的 author_id 主键。这样,每本书都与一个作者相关联,形成了一对多的关系。

理解和正确使用关系对于设计和维护高效的数据库系统至关重要,它们是实现数据组织和检索的基础。

七、一致性、完整性和可维护性

在数据库管理系统中,一致性、完整性和可维护性是三个核心概念,它们确保数据的准确性、可靠性和易于管理。下面分别解释这些概念:

  1. 一致性(Consistency)
    一致性指的是数据在特定时间内的相同视图或状态。在数据库中,一致性通常与事务处理相关,确保事务的执行不会违反数据库的预定规则,即使在并发操作或系统故障的情况下也能保持数据的预期状态。例如,当一个事务从一个账户转账到另一个账户时,系统必须确保两个账户的余额在任何时候都是准确的,不会出现负数余额,这就是一致性的一种体现。

  2. 完整性(Integrity)
    完整性是指数据的准确性和完整性,确保数据符合预定的规则和约束。数据库完整性可以通过以下类型来实现:

    • 实体完整性:确保表中的每一行都有一个唯一的标识符,通常通过主键来实现。
    • 域完整性:确保列中的值符合特定的数据类型和格式。
    • 参照完整性:确保外键约束得到满足,即外键列中的值必须在相关联的表中存在。
    • 用户定义的完整性:根据特定业务规则定义的约束,例如,某些字段的值必须在特定的范围内。
  3. 可维护性(Maintainability)
    可维护性是指数据库的易管理性,包括数据的更新、优化和故障排除的容易程度。一个具有高可维护性的数据库设计应该是清晰的,结构良好,且易于理解和修改。这通常涉及到:

    • 清晰的表结构和关系:表应该有明确的目的,字段应该有描述性的名称,关系应该易于理解。
    • 适当的索引:为了提高查询性能,应该为经常查询的列创建索引,但也要避免过度索引,以免影响插入和更新的性能。
    • 规范化:通过规范化来消除数据冗余,减少数据异常,提高数据的一致性。
    • 文档和注释:数据库设计和代码应该有充分的文档和注释,以便其他开发者或管理员能够理解和维护。

这三个概念是相互关联的。一致性确保数据在事务处理过程中保持预期的状态,完整性确保数据符合业务规则和约束,而可维护性确保数据库设计和实现的长期可管理性和可扩展性。数据库管理员和开发者需要共同努力,以确保数据库系统在整个生命周期中都能满足这些要求。

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

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

相关文章

【PVE】Proxmox VE8.0+创建LXC容器安装docker

为了不影响PVE宿主机&#xff0c;通常使用套娃的形式安装Docker容器&#xff0c;再安装相关docker应用。首先在CT模板中创建 Linux 容器&#xff0c;推荐使用Debian。开启ssh登录&#xff0c;修改debian配置&#xff0c;安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…

代码随想录算法训练营day34

代码随想录算法训练营 —day34 文章目录 代码随想录算法训练营前言一、62.不同路径动态规划动态规划空间优化 二、63. 不同路径 II动态规划动态规划优化空间版 三、343. 整数拆分动态规划贪心算法 96.不同的二叉搜索树总结 前言 今天是算法营的第34天&#xff0c;希望自己能够…

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…

深入内核讲明白Android Binder【三】

深入内核讲明白Android Binder【三】 前言一、服务的获取过程内核源码解析1. 客户端获取服务的用户态源码回顾2. 客户端获取服务的内核源码分析2.1 客户端向service_manager发送数据1. binder_ioctl2. binder_ioctl_write_read3. binder_thread_write4. binder_transaction4.1 …

数据结构(四) B树/跳表

目录 1. LRU 2. B树 3. 跳表 1. LRU: 1.1 概念: 最近最少使用算法, 就是cache缓存的算法. 因为cache(位于内存和cpu之间的存储设备)是一种容量有限的缓存, 有新的数据进入就需要将原本的数据进行排出. 1.2 LRU cache实现: #include <iostream> #include <list>…

初步搭建并使用Scrapy框架

目录 目标 版本 实战 搭建框架 获取图片链接、书名、价格 通过管道下载数据 通过多条管道下载数据 下载多页数据 目标 掌握Scrapy框架的搭建及使用&#xff0c;本文以爬取当当网魔幻小说为案例做演示。 版本 Scrapy 2.12.0 实战 搭建框架 第一步&#xff1a;在D:\pyt…

Python网络自动化运维---用户交互模块

文章目录 目录 文章目录 前言 实验环境准备 一.input函数 代码分段解析 二.getpass模块 前言 在前面的SSH模块章节中&#xff0c;我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中&#xff0c;这样很容易导致账户/密码泄露&#xff0c;而使用Python中的用户交…

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅&#xff1a;从C语言到人工智能&#xff0c;个人成长与突破的全景回顾 引言 回望2024年&#xff0c;我不仅收获了技术上的成长&#xff0c;更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上&#xff0c;CSDN不仅是我展示技术成…

【程序化广告】相关技术(RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法)

上一篇介绍了【程序化广告】广告投放流程/漏斗/要素/策略/指标&#xff0c;本篇介绍一下程序化广告所使用到的相关技术&#xff0c;包括RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法等。 1. RTB竞价原理 1&#xff09;竞价逻辑 用户开启电脑&#xf…

软件测试入门—用例设计中的场景图和状态迁移图

在软件测试领域&#xff0c;用例设计是一项至关重要的工作&#xff0c;它直接关系到软件质量的高低。而场景图和状态迁移图作为用例设计中的两种有效工具&#xff0c;能够帮助测试人员更全面、系统地设计测试用例。下面我们就来深入了解一下这两种图。 一、场景图 场景图主要…

数据表中的数据查询

文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…

前端Vue2项目使用md编辑器

项目中有一个需求&#xff0c;要在前端给用户展示内容&#xff0c;内容有 AI 生成的&#xff0c;返回来的是 md 格式&#xff0c;所以需要给用户展示 md 格式&#xff0c;并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…

Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法

最近&#xff0c;Win11 24H2预览版和Win10 LTSC 2025功能更新偶尔会触发RunDLL错误弹窗 具体表现为 //英文提示 Error in C:\WINDOWS\system32\PcaSvc.dll Missing entry: PcaWallpaperAppDetect//中文提示 C:\WINDOWS\system32\PcaSvc.dll出错 丢失条目:PcaWallpaperAppDe…

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告&#xff1a;高光谱成像技术检测食物新鲜度 检测原理&#xff1a;不同新鲜程度的食品&#xff0c;其化学成分和结构会有所不同&#xff0c;在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

手写SOCKET进行HTTP通信

网络基础 我们电脑主板上都内置了多种网卡&#xff0c;一般主要有以下几类&#xff1a; 虚拟网卡&#xff08;loopback&#xff09; 注意&#xff0c;它是虚拟的&#xff0c;并不是物理网卡&#xff0c;也被称为是本地环回地址(或接口)&#xff0c;一般将127.0.0.1作为本地环回…

MFC程序设计(二)基于对话框编程

从现在开始&#xff0c;我们将以基于对话框的MFC应用程序来讲解MFC应用 向导生成基于对话框MFC应用程序 对话框是一种特殊类型的窗口&#xff0c;绝大多数Windows程序都通过对话框与用户进行交互。在Visual C中&#xff0c;对话框既可以单独组成一个简单的应用程序&#xff0…

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片&#xff0c;怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游…

idea新增java快捷键代码片段

最近在写一些算法题&#xff0c;有很多的List<List这种编写&#xff0c;想着能否自定义一下快捷键 直接在写代码输入&#xff1a;lli&#xff0c;即可看见提示

深度学习-91-大语言模型LLM之基于langchain的模型IO的提示模板

文章目录 1 Model的输入输出2 提示模板2.1 提示模板的特点2.2 提示模板的类型3 使用提示模板3.1 设置环境变量3.2 PromptTemplate提示模板3.2.1 通过from_template方法3.2.2 直接生成提示模板3.2.3 使用提示模板3.2.4 复用提示模板3.3 ChatPromptTemplate聊天提示模板3.3.1 通过…

stm8s单片机(二)外部中断实验

中断优先级 stm8的中断优先级不是固定不变的&#xff0c;stm8的中断分为硬件优先级与软件优先级&#xff1b;当多个中断发生时&#xff0c;cpu会先响应软件优先级高的中断&#xff0c;若软件优先级相同会先响应硬件优先级高的&#xff1b; 其中软件优先级有四个 /*** brief …