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

MySQL 视图入门

一、什么是 MySQL 视图

1.1 视图的基本概念

在 MySQL 中,视图是一种虚拟表,它本身并不存储实际的数据,而是基于一个或多个真实表(基表)的查询结果集。可以把视图想象成是一个预定义好的查询语句的快捷方式。当你查询视图时,MySQL 会动态地执行定义视图时的查询语句,并返回结果,就好像你直接查询了一个真实的表一样。

举个简单的生活例子,假设你有一个装满各种文件的大文件夹,里面的文件按照不同的主题、日期等分类存放。有时候你只需要查看某一类特定的文件,比如最近一周内关于项目 X 的文件。每次都手动去大文件夹里筛选这些文件会很麻烦,于是你可以创建一个“快捷方式”,这个快捷方式会自动帮你找到并显示符合条件的文件。在 MySQL 里,视图就类似于这个“快捷方式”。

1.2 视图与表的区别

  • 数据存储:表是实际存储数据的容器,数据会被持久化保存在磁盘上;而视图只是一个逻辑上的概念,它不存储数据,数据仍然存储在基表中。
  • 操作方式:对表可以进行插入、更新、删除等操作,这些操作会直接影响表中的实际数据;对视图也可以进行部分操作,但这些操作最终还是会映射到基表上,并且有些视图可能不允许进行某些操作(后面会详细介绍)。

二、MySQL 视图的作用

2.1 简化复杂查询

在实际的数据库应用中,查询语句可能会非常复杂,涉及多个表的连接、子查询、复杂的条件过滤等。使用视图可以将这些复杂的查询封装起来,用户只需要查询视图即可,无需关心底层的查询逻辑。

例如,假设我们有两个表:employees 表存储员工的基本信息,departments 表存储部门信息,并且通过 department_id 字段关联。如果我们经常需要查询每个员工所在的部门名称,每次都编写连接查询会很繁琐。这时可以创建一个视图来简化这个查询。

-- 创建 employees 表
CREATE TABLE employees (employee_id INT PRIMARY KEY,employee_name VARCHAR(100),department_id INT
);-- 创建 departments 表
CREATE TABLE departments (department_id INT PRIMARY KEY,department_name VARCHAR(100)
);-- 插入一些示例数据
INSERT INTO employees (employee_id, employee_name, department_id) VALUES
(1, '张三', 1),
(2, '李四', 2);INSERT INTO departments (department_id, department_name) VALUES
(1, '技术部'),
(2, '市场部');-- 创建视图
CREATE VIEW employee_department_view AS
SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;-- 查询视图
SELECT * FROM employee_department_view;

2.2 提高数据安全性

视图可以限制用户对数据的访问权限。通过创建视图,只向用户暴露他们需要的数据,而隐藏敏感信息。

比如,在一个包含员工工资信息的 employees 表中,工资信息是敏感数据,只有管理人员可以查看。我们可以创建一个不包含工资字段的视图,只允许普通员工查询基本信息。

-- 创建包含工资信息的 employees 表
CREATE TABLE employees (employee_id INT PRIMARY KEY,employee_name VARCHAR(100),salary DECIMAL(10, 2)
);-- 插入示例数据
INSERT INTO employees (employee_id, employee_name, salary) VALUES
(1, '张三', 5000),
(2, '李四', 6000);-- 创建不包含工资字段的视图
CREATE VIEW employee_basic_info_view AS
SELECT employee_id, employee_name
FROM employees;-- 普通员工只能查询视图
SELECT * FROM employee_basic_info_view;

2.3 数据独立性

视图可以为用户提供一种逻辑上的数据独立性。当底层表的结构发生变化时,只要视图的查询结果保持不变,用户的查询代码就不需要修改。

例如,假设原来的 employees 表中有 first_namelast_name 两个字段,我们创建了一个视图将这两个字段合并显示为 full_name。后来,表结构发生了变化,将 first_namelast_name 合并为一个 full_name 字段。这时,只要我们修改视图的定义,用户查询视图的代码仍然可以正常使用。

-- 原始表结构
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50)
);-- 创建视图
CREATE VIEW employee_full_name_view AS
SELECT employee_id, CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;-- 修改表结构
ALTER TABLE employees
DROP COLUMN first_name,
DROP COLUMN last_name,
ADD COLUMN full_name VARCHAR(100);-- 修改视图定义
CREATE OR REPLACE VIEW employee_full_name_view AS
SELECT employee_id, full_name
FROM employees;-- 用户查询视图的代码不变
SELECT * FROM employee_full_name_view;

三、MySQL 视图的语法

3.1 创建视图

创建视图的基本语法如下:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}][DEFINER = {user | CURRENT_USER}][SQL SECURITY {DEFINER | INVOKER}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION];
3.1.1 各部分参数详细解释
  • CREATEOR REPLACE

    • CREATE:用于创建一个新的视图。如果视图已经存在,再次使用 CREATE 会报错。
    • OR REPLACE:如果视图已经存在,则替换原有的视图;如果不存在,则创建新的视图。
  • ALGORITHM:指定视图的处理算法,有三种可选值:

    • UNDEFINED:MySQL 会根据具体情况选择合适的算法。这是默认值。
    • MERGE:将视图的查询与外层查询合并执行。也就是说,当你查询视图时,MySQL 会把视图的查询语句和外层查询语句合并成一个新的查询语句,然后一起执行。这种算法通常适用于简单的视图,效率较高。
    • TEMPTABLE:先将视图的查询结果存储在临时表中,再对外层查询进行处理。这种算法适用于复杂的视图,因为它可以避免重复计算视图的查询结果,但会占用额外的临时存储空间。
  • DEFINER:指定视图的定义者,默认为当前用户。可以指定为具体的用户,格式为 'username'@'hostname'

  • SQL SECURITY:指定视图的安全模式,有两种可选值:

    • DEFINER:使用定义者的权限执行视图查询。也就是说,无论谁查询这个视图,都会以定义者的权限来执行视图中的查询语句。
    • INVOKER:使用调用者的权限执行视图查询。即查询视图时,会以执行查询操作的用户的权限来执行视图中的查询语句。
  • view_name:视图的名称,需要遵循 MySQL 标识符的命名规则。

  • column_list:可选参数,指定视图的列名。如果不指定,视图的列名会与查询语句中的列名相同。

  • select_statement:视图的查询语句,这是视图的核心部分,用于定义视图要显示的数据。

  • WITH CHECK OPTION:可选参数,用于确保通过视图插入、更新或删除的数据符合视图的定义条件。CASCADEDLOCAL 用于指定检查的范围:

    • CASCADED:会递归检查所有相关视图的条件。
    • LOCAL:只检查当前视图的条件。
3.1.2 创建视图示例
-- 创建一个简单的视图,使用默认参数
CREATE VIEW customer_view AS
SELECT customer_id, customer_name, email
FROM customers;-- 创建一个使用 OR REPLACE 的视图
CREATE OR REPLACE VIEW customer_view AS
SELECT customer_id, customer_name, email, phone
FROM customers;-- 创建一个指定 ALGORITHM 为 TEMPTABLE 的视图
CREATE ALGORITHM = TEMPTABLE VIEW customer_summary_view AS
SELECT COUNT(*) AS total_customers, AVG(age) AS average_age
FROM customers;

3.2 删除视图

删除视图的语法如下:

DROP VIEW [IF EXISTS] view_name;
  • IF EXISTS:可选参数,如果视图不存在,不会抛出错误。
  • view_name:要删除的视图名称。
3.2.1 删除视图示例
-- 删除视图
DROP VIEW customer_view;-- 使用 IF EXISTS 删除视图
DROP VIEW IF EXISTS customer_summary_view;

3.3 修改视图

虽然 MySQL 没有专门的 MODIFY VIEW 语句,但可以使用 CREATE OR REPLACE VIEW 来修改视图的定义。

3.3.1 修改视图示例
-- 原视图定义
CREATE VIEW product_view AS
SELECT product_id, product_name
FROM products;-- 修改视图定义
CREATE OR REPLACE VIEW product_view AS
SELECT product_id, product_name, price
FROM products;

四、MySQL 视图中的函数使用

在视图的查询语句中,可以使用各种 MySQL 函数来处理数据。下面介绍几个常用的函数。

4.1 CONCAT() 函数

CONCAT() 函数用于将多个字符串连接成一个字符串。

-- 创建一个包含 CONCAT() 函数的视图
CREATE VIEW employee_full_name_view AS
SELECT employee_id, CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;-- 查询视图
SELECT * FROM employee_full_name_view;

4.2 SUM() 函数

SUM() 函数用于计算指定列的总和。

-- 创建一个包含 SUM() 函数的视图,统计每个订单的总金额
CREATE VIEW order_total_view AS
SELECT order_id, SUM(quantity * price) AS total_amount
FROM order_items
GROUP BY order_id;-- 查询视图
SELECT * FROM order_total_view;

4.3 AVG() 函数

AVG() 函数用于计算指定列的平均值。

-- 创建一个包含 AVG() 函数的视图,计算每个部门员工的平均工资
CREATE VIEW department_avg_salary_view AS
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;-- 查询视图
SELECT * FROM department_avg_salary_view;

4.4 COUNT() 函数

COUNT() 函数用于统计记录的数量。

-- 创建一个包含 COUNT() 函数的视图,统计每个部门的员工数量
CREATE VIEW department_employee_count_view AS
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;-- 查询视图
SELECT * FROM department_employee_count_view;

五、对视图进行数据操作

5.1 插入数据

并不是所有的视图都支持插入数据,只有满足一定条件的视图才可以进行插入操作。视图必须满足以下条件:

  • 视图的查询语句中不能包含 GROUP BYHAVINGDISTINCT 等关键字。
  • 视图的查询语句中必须包含所有非空且没有默认值的列。
-- 创建一个可插入数据的视图
CREATE VIEW insertable_employee_view AS
SELECT employee_id, employee_name, department_id
FROM employees;-- 向视图插入数据
INSERT INTO insertable_employee_view (employee_id, employee_name, department_id)
VALUES (3, '王五', 1);

5.2 更新数据

更新视图的数据和插入数据类似,也需要满足一定的条件。更新操作会直接影响基表中的数据。

-- 更新视图中的数据
UPDATE insertable_employee_view
SET employee_name = '赵六'
WHERE employee_id = 3;

5.3 删除数据

删除视图中的数据也会影响基表中的数据。同样,视图需要满足一定的条件才能进行删除操作。

-- 删除视图中的数据
DELETE FROM insertable_employee_view
WHERE employee_id = 3;

六、视图的性能考虑

6.1 索引的使用

虽然视图本身没有索引,但可以通过对基表创建索引来提高视图查询的性能。在创建视图时,如果视图的查询语句中涉及到条件过滤或排序操作,可以考虑在基表的相应列上创建索引。

-- 在 employees 表的 department_id 列上创建索引
CREATE INDEX idx_employees_department_id ON employees (department_id);

6.2 避免复杂的嵌套视图

过多的嵌套视图会增加查询的复杂度,降低查询性能。尽量避免创建过于复杂的嵌套视图,如果需要使用多个视图,可以考虑将它们合并或优化查询逻辑。

七、总结

视图是一个非常强大且实用的工具,它可以简化复杂查询、提高数据安全性和实现数据独立性。在实际应用中,我们需要根据具体的需求和数据特点,合理地使用视图,并注意视图的性能优化。

相关文章:

MySQL 视图入门

一、什么是 MySQL 视图 1.1 视图的基本概念 在 MySQL 中,视图是一种虚拟表,它本身并不存储实际的数据,而是基于一个或多个真实表(基表)的查询结果集。可以把视图想象成是一个预定义好的查询语句的快捷方式。当你查询…...

【洛谷排序算法】P1012拼数-详细讲解

这道题本质上是通过确定数字的拼接顺序来得到最大拼接数,虽然主要思路是利用字符串及其比较规则来实现,但也可以基于数组结合一些转换操作来解决,以下是大致思路和代码示例: 【算法思路】 首先将输入的数字存储在数组中。然后自…...

在WPS中设置word的页码不从第一页开始,从指定页开始插入页码

大家好,我是小鱼。 在日常的办公中为Word文档页面插入页码是经常要做的。如果一个文档有几十页,插入页码不仅可以快速定位到文章的内容,如果需要制作目录也方便制作。正确情况下插入页码都是从第一页开始的,但是有些文档比如说标…...

鸿蒙app 开发中 对于数组方法 filter 的理解

这段代码是 TypeScript 中数组 filter 方法的类型定义,下面将详细解释其各个部分的含义、作用及使用场景。 整体功能概述 filter 方法是 JavaScript 和 TypeScript 中数组对象的一个内置方法,它的主要功能是创建一个新数组,新数组中的元素是…...

【废物研究生刷算法】字符串

文章目录 1. 反转字符串2. 替换数字3. 反转字符串中的单词4. 右旋字符串总结1、字符串处理函数2、字符串切片 如果使用python处理字符串,有很多py内置的函数可以使用,主要还是记住这些处理方法。 1. 反转字符串 class Solution:def reverseStr(self, s, …...

深入理解 SQL 注入漏洞及解决方案

一、引言 在当今数字化时代,数据库作为存储和管理数据的核心组件,其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞,它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…...

Next.js 学习-1

Next.js学习 引用:https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧,正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js,请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了,记得…...

[ComfyUI]Recraft贴图开源方案,实现服装印花自由

一、介绍 今天发现了一个简单又好用的插件,可以实现类似Recraft的贴图功能,这是一个作者开发的ComfyUI插件,叫做Comfyui-Transform 这个插件比我们简单的图像覆盖多了一些可控参数,形状、透明度、倾斜、拉升和混合模式等诸多可控…...

JavaScript 数组连接方法

在 JavaScript 中,有多种方法可以连接数组。每种方法都有其自身的优点和缺点。常见的方法包括 concat()、扩展运算符(...)、push()、splice()、slice()、join()、forEach()、reduce() 以及 Array.from() 等。下面是这些方法的详细说明和示例代码。 1. concat() co…...

Windows安装MySQL教程

1.下载 下载地址:https://www.mysql.com/downloads/ 下载版本:MySQL Installer for Window 2.安装MySQL 以下只列出需要注意的一些界面,没出现的界面默认继续即可。 1.选择安装类型 提供了多种安装模式,包括默认开发版、仅…...

VOS3000线路对接、路由配置与路由分析操作教程

一、VOS3000简介 VOS3000是一款常用的VoIP运营平台,支持多种线路对接和路由配置,适合新手快速上手。本教程将带你了解如何对接线路、配置路由以及进行路由分析。 二、线路对接 准备工作 获取线路信息:从供应商处获取线路的IP地址、端口、用…...

PiscTrace的开发者版

基于 PiscTrace 架构的视图处理的纯开发板,支持静态图片、实时视频流、摄像头视频流和网络视频流的处理。与 PiscTrace 应用版相比,开发者版通过直接的代码开发,提供了更高的灵活性和可定制性,适用于需要深度定制和复杂处理的应用…...

OnlyOffice:前端编辑器与后端API实现高效办公

OnlyOffice:前端编辑器与后端API实现高效办公 一、OnlyOffice概述二、前端编辑器:高效、灵活且易用1. 完善的编辑功能2. 实时协作支持3. 自动保存与版本管理4. 高度自定义的界面 三、后端API:管理文档、用户与权限1. 轻松集成与定制2. 实时协…...

github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新

1.github上新建一个repository 设置为private tips删除在这 点setting 然后往下拖动 会有个这里是用来删项目的 2.另外 一台电脑拉取这个repository的时候 需要配置 一个ssh key 这个key的内容生成参考本地电脑的生成 然后在这配置 2.1 生成 SSH 密钥(如果还没有…...

本周行情——250222

本周A股行情展望与策略 结合近期盘面特征及市场主线演化,本周A股预计延续结构性分化行情,科技成长与政策催化板块仍是资金主战场,但需警惕高标股分歧带来的波动。以下是具体分析与策略建议: 1. 行情核心驱动因素 主线延续性&…...

分发糖果(力扣135)

题目说相邻的两个孩子中评分更高的孩子获得的糖果更多,表示我们既要考虑到跟左边的孩子比较,也要考虑右边的孩子,但是我们如果两边一起考虑一定会顾此失彼。这里就引入一个思想:先满足右边大于左边时的糖果分发情况,再…...

QML ToolButton与DelayButton的使用、详解与自定义样式

QML MenuBarItem与MenuItem的使用、详解与自定义样式 一、介绍1、ToolButton常见用法基础示例设置图标 常用属性texticonenabledshortcutcheckable & checked 信号onClickedonPressed 和 onReleased 样式和外观使用场景 2、DelayButton使用场景核心属性1. delay 核心信号1.…...

动态规划

简介 动态规划最核心两步: 状态表示:dp[i]代表什么状态转移方程:如何利用已有的dp求解dp[i] 只要这两步搞对了, 就完成了动态规划的%95 剩下的就是细节问题: dp初始化顺序(有时是倒序)处理边…...

SQL FIRST() 函数详解

SQL FIRST() 函数详解 在SQL中,FIRST() 函数是一个用于处理查询结果的聚合函数。它通常与 GROUP BY 子句结合使用,用于返回每个分组中的第一个记录。本文将详细解释 FIRST() 函数的用法、参数、返回值以及与它的关联函数。 1. 函数概述 FIRST() 函数的…...

ClickHouse系列之ClickHouse安装

ClickHouse系列之ClickHouse安装 1 ClickHouse2 Docker安装ClickHouse2.1 docker 启动脚本2.2 默认用户及密码2.3 8123和9000端口的作用2.3.1 81232.3.2 9000 3 Clickhouse连接3.1 命令行客户端连接3.1.1 常见的客户端脚本3.1.1.1 查看数据库:show databases;3.1.1.…...

大模型监督微调(SFT)技术解析

大模型监督微调(SFT)技术深度解析 一、基本知识介绍 监督微调(Supervised Fine-Tuning)是连接预训练与具体应用的关键技术层。其本质是通过特定任务的标注数据,在保持预训练模型核心能力的前提下,调整模型…...

PTA: 有序顺序表的合并

请设计一个能够将有序顺序表LA,LB进行合并的算法,要求合并后的顺序表LC依然有序。 例如: LA的元素 1 3 5 7 LB的元素 2 4 LC的元素 1 2 3 4 5 7 其中,LA和LB的长度不超过1000,当中的元素为非递减排序。 输入格式: 第…...

Vuetify解决与旧版浏览器(如Internet Explorer 11)的兼容性问题‌

简介 由于Vuetify使用了ES2015/2017的特性,这些特性在旧版浏览器中可能不被支持,因此需要通过配置来确保这些特性能够被正确转换。 配置1 在项目项目根目录下的vue.config.js文件,或nuxt.config.ts中,添加 transpileDependencies …...

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...

Shell文档归档、压缩与解压

Shell文档归档、压缩与解压 1、文件归档与压缩2、zip、gzip与tar指令2.1、zip指令2.2、gzip指令2.3、tar指令 1、文件归档与压缩 归档文件是指将一组文件或目录保存到一个文件中;压缩文件是指将一组文件或目录按照某种存储格式保存到一个文件中,所占磁盘…...

【Bluedroid】AVRCP 连接源码分析(一)

一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…...

CMake入门

1.什么是CMake Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。 不同的IDE所集成的make工具所遵循的规范和标准都不同,也…...

基于vite6创建项目

pnpm create vue vite已自动配置路径,在.config.js jsconfig.json 中 按需引用element-plus 官网中有 pnpm install element-plus npm install -D unplugin-vue-components unplugin-auto-import // vite.config.ts import { defineConfig } from vite import Aut…...

简单封装一个websocket构造函数

问题描述 最近维护一个老项目,发现项目中有大量重复代码,特别是websocket的调用这一块,同样的代码复制了十几个页面,于是自己封装了一个websocket调用的构造函数。 export default class CreateWebSocket {constructor(url) {//…...

大模型产品Deepseek(八)、数据嵌入+知识库管理+联网搜索,实现精准的知识查询

如何将数据嵌入到DeepSeek中以实现精准的知识查询 1. 目标 DeepSeek是一个强大的基于大模型的知识查询工具,能够通过数据嵌入和智能查询功能提供精确的答案。本文将详细介绍如何在DeepSeek中进行数据嵌入,以便最大化其在实际应用中的价值。 2. 推荐使用的Page Assist插件 …...

探索Vue:数字翻滚动画的实现与优化

在前端开发中,动画效果总能为用户界面增添一抹生动与趣味。今天,我们将深入剖析一个基于Vue 3实现的数字翻滚动画组件,从代码结构到功能实现,再到性能优化,一步步揭开它的神秘面纱。 组件概述 这个Vue组件名为Number…...

POI pptx转图片

前言 ppt页面预览一直是个问题&#xff0c;office本身虽然有预览功能但是收费&#xff0c;一些开源的项目的预览又不太好用&#xff0c;例如开源的&#xff1a;kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老&#xff0c;使用版本较旧 <dependency><gro…...

力扣LeetCode: 2506 统计相似字符串对的数目

题目&#xff1a; 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成&#xff0c;则认为这两个字符串 相似 。 例如&#xff0c;"abca" 和 "cba" 相似&#xff0c;因为它们都由字符 a、b、c 组成。然而&#xff0c;"aba…...

DeepSeek模型量化

技术背景 大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;&#xff0c;可以通过量化&#xff08;Quantization&#xff09;操作来节约内存/显存的使用&#xff0c;并且降低了通讯开销&#xff0c;进而达到加速模型推理的效果。常见的就是把Float16的浮…...

如何调整CAN位宽容忍度?

CAN位宽容忍度是指在控制器局域网络&#xff08;CAN, Controller Area Network&#xff09;中允许时钟同步的误差范围。这是CAN网络正常通信时的关键因素之一&#xff0c;因为CAN协议依赖位同步来确保多个节点在总线上正确解码数据。CAN位宽容忍度确保节点之间由于时钟偏差或抖…...

Versal - 基础6(Linux 开发 AIE-ML + 自动化脚本解析)

目录 1. 简介 2. 步骤解析 2.1 概览 2.1.1 步骤依赖关系 2.1.2 总目录结构 2.2 Vitis XPFM 2.2.1 Dir 2.2.2 Makefile 2.2.3 vitis_pfm.py 2.3 Kernels 2.3.1 Dir 2.3.2 Makefile 2.3.3 config 文件 2.4 AIE_app 2.4.1 Dir 2.4.2 Makefile 2.4.3 aie 要点 2.…...

乐享数科:供应链金融—三个不同阶段的融资模式

供应链金融是与产业链紧密结合的融资模式&#xff0c;它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段&#xff0c;并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点&#xff1a; 供应链金融融资模式主要分为以下几种&#xff1…...

vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容

1、先安装vmware workstation 17 player&#xff0c;然后再安装Ubuntu Desktop虚拟机&#xff0c;然后再安装vmware tools&#xff0c;具体可以参考如下视频&#xff1a; VMware虚拟机与主机实现文件共享&#xff0c;其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…...

【React】React 基础(2)

JSX 是什么 JSX是一种 JavaScript 的语法扩展(extension), 也在很多地方称之为 JavaScript XML, 因为看起就是一段XML语法。它用于描述我们的Ul界面&#xff0c;并且其完成可以和 JavaScript 融合在一起使用&#xff1b; 为什么 React 选择使用 jsx&#xff1f; React 认为渲…...

DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署

DeepSeek接入Siri&#xff08;已升级支持苹果手表&#xff09;完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台&#xff0c;通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括&#xff1a;深度学习模型搜索&…...

ASP.NET MVC AJAX 文件上传

如何使用 MVC 5 和 AJAX&#xff08;.NET Framework&#xff09;上传文件。 使用AJAX和ASP.NET MVC 上传文件 再简单不过了。对于最纯粹的人来说&#xff0c;这不需要使用jQuery。此代码实际上允许上传多个文件。 注意&#xff1a;以下代码示例支持 ASP.NET MVC 5。如果使用 .…...

npm使用了代理,但是代理软件已经关闭导致创建失败

如果在关闭前打开了vscode&#xff0c;此时vscode中的终端没有刷新&#xff0c;就会出现这个问题&#xff0c;最开始会一直转圈圈&#xff0c;直到超时&#xff0c;然后出现该报错 ❯ npm create vuelatest npm error code ECONNREFUSED npm error syscall connect npm error …...

Spring Boot定时任务原理

Spring Boot定时任务原理 在现代应用中&#xff0c;定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持&#xff0c;通过注解驱动的方式&#xff0c;开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…...

公文派2025:免费社区版重大安装更新!

大家好&#xff0c;感谢对「公文派」的支持。 距离上一次更新已经过去了将近一年的时间&#xff0c;今天我们带来了全新的免费2025社区版&#xff0c;该版本也是目前最新的版本&#xff0c;无需授权即可使用所有的功能。 我们先来看下本版本的更新及特色功能 聚合多个AI功能…...

Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)

&#x1f638;个人主页&#x1f449;&#xff1a;神兽汤姆猫 &#x1f4d6;系列专栏&#xff1a;开发语言环境配置 、 Java学习 、Java面试 、Markdown等 学习上的每一次进步&#xff0c;均来自于平时的努力与坚持。 &#x1f495;如果此篇文章对您有帮助的话&#xff0c;请点…...

ES6相关操作

一.JavaScript的基础语法 1.Demo1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JavaScrip…...

【运维】源码编译安装cmake

背景&#xff1a; 已经在本地源码编译安装gcc/g&#xff0c;现在源码安装cmake 下载源码 下载地址&#xff1a;CMake - Upgrade Your Software Build System 安装步骤&#xff1a; ./bootstrap --prefix/usr/local/cmake make make install 错误处理 1、提示找不到libmpc.…...

代码随想录_回溯

代码随想录_回溯 回溯 77.组合 77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路: 回溯 优化: 剪枝 注意代码中i&#xff0c;就是for循环里选择的起始位置。 for (int i startIndex; i <…...

tauri2实现监听记住窗口大小变化,重启回复之前的窗口大小

要想实现记住窗口大小的功能&#xff0c;整体逻辑就是要监听窗口大小变化&#xff0c;将窗口大小保存下来&#xff0c;重启之后&#xff0c;读取保存的大小&#xff0c;然后恢复。这里可以使用rust层实现&#xff0c;也可以在前端实现。我这里就纯rust层实现了。 监听窗口变化…...

番茄工作法html实现

对比了deepseek-r1-online和本地部署的14b的版本&#xff0c;输出的输出的html页面。 在线满血版的功能比较强大&#xff0c;可以一次完成所有要求。14b版本的功能有一些欠缺&#xff0c;但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...