DML语句,ORACLE数据库

article/2025/9/30 13:30:15
  • DML语句
  • 目录

 

  • DML语句定义

DML语句:数据操纵语句,针对的是数据,经过DML语句的操作,能够对数据源中的数据内容进行调整,包括数据的增加、删除、更新。

争议:SELECT是否属于DML语句?

按照DML语句的定义,执行过DML操作后,数据源中的数据会有所变化,而SELECT语句仅仅是在查询结果中临时对数据有一定程度的变更,但数据源中的原始数据未发生任何变动,因此SELECT并不算作DML语句。

  • 手动DML(FOR UPDATE)
  1. 语法

SELECT * FROM TB_NAME FOR UPDATE; --全局修改

SELECT * FROM TB_NAME WHERE CONDITION FOR UPDATE; --部分修改

语句执行后,目标表的状态即由不可解锁转为可解锁状态,同时【提交】和【回滚】按钮开放,此时可以通过查询结果上方的小锁对表解锁,解锁后可直接在查询结果中进行修改,修改结束后点击绿色对勾表示修改完成,再点击小锁使表回到锁定状态,最后点击【提交】按钮使修改生效或点击【回滚】按钮取消刚才的修改。

  1. 应用场景
  1. 测试时为了验证代码的准确性,小范围临时修改数据,一般验证结束后需要再改回;
  2. 生产环境非常小的修改,不值得重新跑批程序;(一般很少)
  3. 客户通过EXCEL表格提供少量数据,要求导入到数据库中,可通过该方法直接复制粘贴到表中。(演示)
  4. 总结:范围小、数据少、临时(非常规)

  1. 优缺点

1)优点:1.操作简单;

2.可以同时满足增、删、改三方面的需求。

2)缺点:1.所做操作不能留下痕迹,不方便后续回顾;

2.同时对大量数据操作时会有崩溃的危险;

3.必须依赖特定的数据库操作工具。

  • 自动DML
  1. 不基于原表
    1. INSERT
  1. 语法:

1.单条数据的插入-录入确定内容(语法1)

INSERT INTO TB_NAME (COL_LIST)

VALUES (DATA_LIST);

2.多条数据的插入-插入查询结果(语法2)

INSERT INTO TB_NAME (COL_LIST)

SELECT …;

SELECT A.DEPTNO, DNAME, COUNT(1) EMP_CT, SUM(SAL) SAL_NUM

  FROM EMP A --来源表

  LEFT JOIN DEPT B --来源表

    ON A.DEPTNO = B.DEPTNO

 GROUP BY (A.DEPTNO, DNAME);

--建表

CREATE TABLE DEPT_EMP(DEPTNO NUMBER,DNAME VARCHAR2(15),EMP_CT NUMBER,SAL_NUM NUMBER);

SELECT * FROM DEPT_EMP;

--插入数据(多条数据的插入)

INSERT INTO DEPT_EMP --目标表

  SELECT *

    FROM (SELECT A.DEPTNO, DNAME, COUNT(1) EMP_CT, SUM(SAL) SAL_NUM

            FROM EMP A

            LEFT JOIN DEPT B

              ON A.DEPTNO = B.DEPTNO

           GROUP BY (A.DEPTNO, DNAME));

--将【来源表】中的数据经过加工处理插入到【目标表】中

1.语法1注意点

1.该语法每次仅能插入一条数据;

2.指定插入的数据可与表结构在数量或顺序上不一致,此时字段列表必须与数据列表在列数、顺序、属性、内容上完全一致,否则会报错;

3.若插入的数据在列数、顺序、属性、内容上与表结构完全一致,可在语句中省略字段列表;

4.相较于手动插入数据,语法1能够同时承受的数据插入会更多,但不会多出太多,且还是会有崩溃的危险。若数据量较多建议改到命令窗口执行且中间多穿插’【COMMIT; 】命令。

2.语法2注意点

  1. 该语法能够支持同时插入多条数据,数据量的多少取决于后边的查询部分;
  2. 插入数据的列数、顺序、属性、内容完全取决于查询部分;
  3. 指定插入的数据可与表结构在列数或顺序上不一致,此时字段列表必须与数据列表在列数、顺序、属性、内容上完全一致,否则会报错;
  4. 若插入的数据在列数、顺序、属性、内容上与表结构完全一致,可在语句中省略字段列表;
  5. 查询部分可以是完全独立的一部分,所有语法规则完全遵循查询的语法,也因为如此,该语法非常灵活,可通过改变查询部分来改变最终插入的数据。
  1. 查看表结构
  1. 通过右键菜单DESCRIBE描述来查看
  2. SELECT * 直接查询该表
  3. 通过右键菜单VIEW查看和EDIT编辑来查看表结构
  4. 在COMMAND WINDOW中 DESC TB_NAME 回车
  5. 在CMD窗口中连接SQLPLUS DESC TB_NAME 回车

  1. 应用场景
  1. 语法1应用场景:1.少量确定数据的临时插入;

2.程序中少量固定数据的频繁插入。

  1. 语法2应用场景:

工作中所有的固定化程序中,无论数据量的大小。

注:语法2是所有数据插入中效率最快的方法,即便数据量非常大时也会出现效率低的情况,但是相比起来,前两种方法效率会更低。

  1. DELETE
    1. 语法

DELETE FROM TB_NAME; --全部数据的删除

DELETE FROM TB_NAME WHERE CONDITION; --有条件的数据删除

注意:1.手动执行删除时,删除语句最好由查询语句变更得到,提交前一定要先确认好删除结果;2.WHERE子句与查询中的WHERE子句用法完全一致。

2.数据的插入思想

数据的插入思想:先删后插-防止数据重复插入

举例:

建一张表(包含姓名、部门名称、岗位、薪资、工作地点),并多次插入对应数据。

建一张表(包括部门名称、人数、薪资合计、平均薪资),并多次插入对应数据。

  

数据的加工流程:

一次性(或分批次)删除结果表中的本批数据及中间表的所有数据

查询源表插入到中间表1

查询中间表1插入到中间表2

查询中间表N插入到结果表

--建表

CREATE TABLE DEPT_EMP(DEPTNO NUMBER,DNAME VARCHAR2(15),EMP_CT NUMBER,SAL_NUM NUMBER);

SELECT * FROM DEPT_EMP;

--插入数据(多条数据的插入)

DELETE FROM DEPT_EMP;  --先删除再插入(先删再插,避免重复数据的插入)

INSERT INTO DEPT_EMP --目标表

  SELECT *

    FROM (SELECT A.DEPTNO, DNAME, COUNT(1) EMP_CT, SUM(SAL) SAL_NUM

            FROM EMP A

            LEFT JOIN DEPT B

              ON A.DEPTNO = B.DEPTNO

           GROUP BY (A.DEPTNO, DNAME));

--将【来源表】中的数据经过加工处理插入到【目标表】中

  1. UPDATE
    1. 语法

UPDATE TB_NAME SET = EXPR2,....] [WHERE CONDITION]; COL1 = EXPR1 [,COL2

--更新员工信息表中数据,根据每个部门给每个员工调薪,10号部门上调10%,20号部门上调20%,30号部门下调5%

SELECT * FROM EMP;

UPDATE EMP SET SAL=1.1*SAL WHERE DEPTNO=10;

UPDATE EMP SET SAL=1.2*SAL WHERE DEPTNO=20;

UPDATE EMP SET SAL=0.95*SAL WHERE DEPTNO=30;

UPDATE EMP SET SAL=CASE WHEN DEPTNO=10 THEN 1.1*SAL WHEN DEPTNO=20 THEN 1.2*SAL WHEN DEPTNO=30 THEN 0.95*SAL END;

注意:

1.更新后的结果可以是某个固定内容,或是函数处理后的结果,或是运算,或是子查询(单行单列);

2.更新时等号左边是待更新的字段,右边是更新后的结果,顺序不要写反了。

  1. 疑问
  2. 若是将两个字段对调,是写一个语句同时更新,还是写两个语句分别更新?

ENAME和JOB对调

SELECT * FROM EMP;

--一个语句同时更新

UPDATE EMP SET ENAME=JOB,JOB=ENAME; --回滚日志

--两个语句分别更新

UPDATE EMP SET ENAME=JOB; --ENAME旧

UPDATE EMP SET JOB=ENAME; --会将JOB和ENAME更新成一样的数据(不能引用到另一条SQL的日志)

  1. 能否根据不同的条件更新为不同的结果?

--更新员工信息表中数据,根据每个部门给每个员工调薪,10号部门上调10%,20号部门上调20%,30号部门下调5%

--1

UPDATE EMP SET SAL=1.1*SAL WHERE DEPTNO=10;

UPDATE EMP SET SAL=1.2*SAL WHERE DEPTNO=20;

UPDATE EMP SET SAL=0.95*SAL WHERE DEPTNO=30;

--2

UPDATE EMP SET SAL=CASE WHEN DEPTNO=10 THEN 1.1*SAL WHEN DEPTNO=20 THEN 1.2*SAL WHEN DEPTNO=30 THEN 0.95*SAL END;

  1. 使用UPDATE将所有列都更新为空值,是否等同于删除该行数据?

否,所有列更新为空,是里面的值为空但这条数据还存在;而删除该行数据,这条数据则不存在了。

  1. 基于原表的DML操作--MERGE
    1. 语法

 MERGE INTO TB_NAME A --目标表

 USING DATA_SOURCE B --数据源 --表、视图、子查询

    ON (CONDITION) --关联条件:

  WHEN MATCHED THEN --如果能匹配上

UPDATE  --对目标表中的旧数据进行更新

   SET A.COL1 = B.COL1,A.COL2 = B.COL2 ...

 WHERE CONDITION –更新条件-以关联条件成立为前提

DELETE  --对目标表中的旧数据进行删除

 WHERE CONDITION --删除条件-以更新条件成立为前提

  WHEN NOT MATCHED THEN

INSERT (A.COL1,A.COL2....)

VALUES (B.COL1,B.COL2....) --将数据源中的新数据插入到目标表

 WHERE CONDITION; --插入条件-以关联条件不成立为前提

  1. 测试表
    1. 表名

SELECT * FROM GOODS_CURRENT; --当前商品信息

SELECT * FROM GOODS_CHANGE;  --商品变动信息

​​​​​​​2.建表并插入数据

CREATE TABLE GOODS_CURRENT

     (GOODS_ID    varchar2(20),

      GOODS_NAME  varchar2(50),

      PRICE       number,

      COST        number,

      GOODS_TYPE  varchar2(50)

       );

DELETE FROM GOODS_CURRENT;

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G01', '笔记本', 10, 5, '办公用品');

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G02', '中性笔', 2, 1, '办公用品');

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G03', '卫龙辣条', 3, 1, '食品');

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G04', '薯片', 10, 4, '食品');

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G05', '数据库设计手册', 40, 20, '书籍');

insert into GOODS_CURRENT (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE)

values ('G06', '高等数学', 30, 15, '书籍');

SELECT * FROM GOODS_CURRENT;

SELECT * FROM GOODS_CHANGE;

CREATE TABLE GOODS_CHANGE

     (GOODS_ID    varchar2(20),

      GOODS_NAME  varchar2(50),

      PRICE       number,

      COST        number,

      GOODS_TYPE  varchar2(50),

      DEL_FLAG    varchar2(20),

      UPDATE_DT   varchar2(50)

       );

insert into GOODS_CHANGE (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE, DEL_FLAG, UPDATE_DT)

values ('G08', '百事可乐', 5, 2, '食品', null, '2022-06-20');

insert into GOODS_CHANGE (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE, DEL_FLAG, UPDATE_DT)

values ('G01', '笔记本', 12, 5, '办公用品', null, '2022-06-20');

insert into GOODS_CHANGE (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE, DEL_FLAG, UPDATE_DT)

values ('G07', '大宝SOD', 30, 20, '护肤品', null, '2022-07-10');

insert into GOODS_CHANGE (GOODS_ID, GOODS_NAME, PRICE, COST, GOODS_TYPE, DEL_FLAG, UPDATE_DT)

values ('G03', '卫龙辣条', 4, 1, '食品', 'Y', '2022-07-10');

SELECT * FROM GOODS_CHANGE;

​​​​​​​3.测试内容

  1. 同时进行了更新和插入的操作(最常用)

已有商品更新价格,新商品上架

MERGE INTO GOODS_CURRENT A

USING GOODS_CHANGE B

ON(A.GOODS_ID=B.GOODS_ID)

WHEN MATCHED THEN

  UPDATE SET A.PRICE=B.PRICE

  WHEN NOT MATCHED THEN

    INSERT (A.GOODS_ID,A.GOODS_NAME,A.PRICE,A.COST,A.GOODS_TYPE)

    VALUES(B.GOODS_ID,B.GOODS_NAME,B.PRICE,B.COST,B.GOODS_TYPE);

2.仅更新

已有商品更新价格

SELECT * FROM GOODS_CURRENT;

SELECT * FROM GOODS_CHANGE;

MERGE INTO GOODS_CURRENT A

USING GOODS_CHANGE B

ON(A.GOODS_ID=B.GOODS_ID)

WHEN MATCHED THEN

  UPDATE

  SET A.PRICE=B.PRICE;

3.仅插入

新商品上架

SELECT * FROM GOODS_CURRENT;

SELECT * FROM GOODS_CHANGE;

MERGE INTO GOODS_CURRENT A

USING GOODS_CHANGE B

ON(A.GOODS_ID=B.GOODS_ID)

WHEN NOT MATCHED THEN

INSERT(A.GOODS_ID,A.GOODS_NAME,A.PRICE,A.COST,A.GOODS_TYPE)

VALUES(B.GOODS_ID,B.GOODS_NAME,B.PRICE,B.COST,B.GOODS_TYPE);

4.在做插入或更新时可以加入条件(彼此互不影响)

已达到更新日期的旧商品变更价格,新商品上架,未达到更新日期的不做任何变动

SELECT * FROM GOODS_CURRENT;

SELECT * FROM GOODS_CHANGE;

MERGE INTO GOODS_CURRENT A

USING GOODS_CHANGE B

ON(A.GOODS_ID=B.GOODS_ID)

WHEN MATCHED THEN

  UPDATE

  SET A.PRICE=B.PRICE

  WHERE UPDATE_DT<=TO_CHAR(SYSDATE,'YYYY-MM-DD')

  WHEN NOT MATCHED THEN

  INSERT(A.GOODS_ID,A.GOODS_NAME,A.PRICE,A.COST,A.GOODS_TYPE)

VALUES(B.GOODS_ID,B.GOODS_NAME,B.PRICE,B.COST,B.GOODS_TYPE)

WHERE UPDATE_DT<=TO_CHAR(SYSDATE,'YYYY-MM-DD');

5.在MERGE中使用删除的操作

用变动表更新商品表,更新时要根据日期来决定是否更新,另外删除标识为Y的商品下架

SELECT * FROM GOODS_CURRENT;

SELECT * FROM GOODS_CHANGE;

MERGE INTO GOODS_CURRENT A

USING GOODS_CHANGE B

ON(A.GOODS_ID=B.GOODS_ID)

WHEN MATCHED THEN

  UPDATE

  SET A.PRICE=B.PRICE

  WHERE UPDATE_DT<=TO_CHAR(SYSDATE,'YYYY-MM-DD')

  DELETE  --会受到UPDATE SET中WHERE条件的影响

  WHERE B.DEL_FLAG='Y'

  WHEN NOT MATCHED THEN

      INSERT(A.GOODS_ID,A.GOODS_NAME,A.PRICE,A.COST,A.GOODS_TYPE)

VALUES(B.GOODS_ID,B.GOODS_NAME,B.PRICE,B.COST,B.GOODS_TYPE)

WHERE UPDATE_DT<=TO_CHAR(SYSDATE,'YYYY-MM-DD');

​​​​​​​MERGE 语法的优劣

1.优势

1.可以同时满足增、删、改的要求,而不必分开书写多个SQL

2.可以依据目标表原有数据的情况作出改动

2.劣势

1.要求的合并以及需要顾及原表内容,会导致运行负担的增加

2.暂时无法单独满足删除的要求

​​​​​​​​​​​​​​DML语句的注意点

1.对数据源的任何修改,都需要经过提交才能最终生效,提交前若是对所做的修改不满意,

可通过回滚来取消修改。若未提交,则做出的修改仅能在当前窗口临时生效,其他会话窗口查不到当前的修改。

2.无论什么类型的何种DML操作,在操作过程中都会产生回滚日志,

以用于操作的回滚或数据的恢复。日志的生成可通过代码指令或参数设置来取消,

但该操作非常危险,一旦数据库运行出现错误,若是缺少相应的日志,数据就有可能会丢失。


http://chatgpt.dhexx.cn/article/YxIXYfyd.shtml

相关文章

mysql中基本的DML语句

1.DML语句的含义 数据操纵语言&#xff08;DML&#xff09; 由 DBMS 提供&#xff0c;用于让用户或程序员使用&#xff0c;实现对数据库中数据的操作。基本的 DML 分为两类四种&#xff1a;检索&#xff08;查询&#xff09;和更新&#xff08;插入、删除、修改&#xff09;。…

MySQL基础之DML语句

DML 语句 DML(Data Manipulation Language)语句:数据操纵语句。 用途:用于添加、修改、删除和查询数据库记录,并检查数据完整性。 常用关键字:insert、update、delete、select等。 DML 操作的对象是库表的数据(记录)。 主要包括插入(insert)、更新(update)、删…

CentOS下Tomcat的安装及配置教程

下载Tomcat&#xff0c;官网地址&#xff1a;https://tomcat.apache.org/download-80.cgi。 在 /usr/local 目录下新建 tomcat 文件夹&#xff0c;并进入。 cd /usr/local mkdir tomcat cd tomcat打开 Xftp&#xff0c;将 Tomcat 压缩文件拖拽到 刚创建的tomcat 目录。 解压…

Tomcat 实用安装教程

Tomcat的介绍 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#xff0c;最新的Servlet 和JSP 规范总是能在Tomcat 中得…

Apache Tomcat 安装配置图文详细教程

一、安装JDK步骤及配置JDK环境变量步骤省略。 二、安装Tomcat(提前请先安装JDK) 1.下载好压缩包后&#xff0c;直接解压至某一目录下&#xff0c;目录中不能包含中文。解压后如图所示&#xff1a; 2.将此文件夹拷贝到你常用的根目录下。这样就算安装好了&#xff01; 3.接下来…

windows下Tomcat详细安装配置教程

springboot用习惯后&#xff0c;几乎都要忘记了tomcat是个啥了&#xff0c;本文就不讲那些理论类的知识了&#xff0c;直接看看怎么安装使用tomcat。 一、版本选择 首先我们需要选好版本&#xff0c;可以参考官方的版本说明&#xff1a;https://tomcat.apache.org/whichversio…

Linux安装tomcat详细教程

Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#xff0c;最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现&#…

Tomcat安装及配置教程(超详细的图文教程)

Tomcat安装及配置教程&#xff08;超详细的图文教程&#xff09; 1.什么是Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的…

安装Tomcat步骤

安装Tomcat步骤 1、tomcat官网下载http://tomcat.apache.org/ 2、解压后右键以管理员身份运行&#xff0c;页面出来后点击下一步 3、同意协议&#xff0c;然后点击I Agree 4、系统默认选中的前三个不要管&#xff0c;直接点击下一步next 5、配置页面&#xff0c;要求输入端…

机器学习——聚类——密度聚类法——OPTICS

目录 理论部分1.1 提出背景1.2 OPTICS算法1.2.1 基本概念1.2.2 算法流程1.2.3 优点1.2.4 缺点 1.3 其它算法 代码部分2.1 自行实现2.2 sklearn实现 理论部分 1.1 提出背景 在DBSCAN算法中&#xff0c;需要人为确定领域半径 ϵ \epsilon ϵ和密度阈值 M M M,同时该算法的性能又…

Ansys Zemax | 眼科镜片设计

本文介绍了眼科镜片的设计原理&#xff0c;并讨论了镜片、眼睛和视觉环境中对镜片设计十分关键的参数&#xff0c;其中包括了常见镜片材料&#xff08;涵盖了玻璃和聚合物&#xff09;的玻璃目录。本文不包括渐进式镜片设计&#xff0c;尽管渐进式镜片时常根据一般的镜片曲率原…

OPTICS聚类算法详解

欢迎关注”生信修炼手册”! DBSCAN算法对于邻域半径eps和最小样本数minPoints这两个参数比较敏感&#xff0c;不同的参数取值会产生不同的聚类效果。为了降低参数设置对聚类结果造成的不稳定性&#xff0c;在DBSCAN算法的基础上&#xff0c;提出了OPTICS算法&#xff0c;全称如…

密度聚类:OPTICS算法简单易懂版

前几天写了一篇详解版&#xff0c;感觉可能太详细了阅读量不高&#xff0c;所以修改精简成这篇。 很多人不理解OPTICS算法绘出的图该怎么理解。为什么波谷就算一类&#xff0c;有个波峰又算另一类了&#xff0c;本篇在第三部分的第2、3节详细讲这个是什么判别分类的。 本篇会添…

optics算法

1 简介 随着数据爆发式增长&#xff0c;分析数据从而提取隐藏在数据中的信息变的越来越重要。聚类分析是数据分析的一个主要方法&#xff0c;聚类(clustering)是将数据对象进行分类的过程&#xff0c;使同一类中的对象之间具有很高的相似度&#xff0c;而不同类中的对象高度相…

OptiSystem应用:激光雷达系统设计

简介&#xff1a;激光探测和测距系统(LIDAR) 以下四个示例设计演示了如何使用OptiSystem模拟光检测和测距系统&#xff08;LIDAR&#xff09;&#xff0c;具体如下&#xff1a; □ 激光脉冲飞行时间测量 □ 相移测距 □ 调频连续波&#xff08;FMCW&#xff09;直接检测测…

基于密度的DBSCAN聚类及其优化的OPTICS聚类(二)

1.OPTICS聚类算法 应用背景&#xff1a;如今整个数据集越来越复杂&#xff0c;都采用到了至少一个全局密度表征参数。如果对同一数据集中同时也存在这两种不同的全局密度表征参数的一个聚类簇或者是两个的嵌套簇,则所使用到的DBSCAN算法显然并没有做到高效地处理&#xff0c;因…

sklearn聚类算法OPTICS

本文的csdn链接&#xff1a;https://blog.csdn.net/Jinyindao243052/article/details/107544145 知乎链接&#xff1a;https://zhuanlan.zhihu.com/p/163218826 算法 The OPTICS (Ordering Points To Identify the Clustering Structure) algorithm shares many similarities…

Optics and Lasers in Engineering期刊误选,审查中的论文发表在SSRN,撤销方法,适用于所有爱思唯尔期刊

在投稿的时候&#xff0c;没太看懂选项&#xff0c;误以为是Proof阶段公开&#xff0c;没想到是审查的时候就公开在SSRN&#xff0c;在网上查阅资料的时候&#xff0c;大多数人是推荐在SSRN上删除论文&#xff0c;避免他人盗取创新点 首先我们登录SSRN界面 选择my paper 在P…

密度聚类:OPTICS算法详解

很多人不理解OPTICS算法绘出的图该怎么理解。为什么波谷就算一类&#xff0c;有个波峰又算另一类了&#xff0c;本篇在第三部分的第2、3节详细讲这个是什么判别分类的。 本篇会添加一些个人思考过程&#xff0c;可能有不严谨的地方&#xff0c;希望在评论区讨论指正。 另外&a…

Ocean Optics USB2000光谱仪无法在Win10系统运行

1、问题描述 USB2000型光谱仪&#xff0c;由于生产年代过于久远&#xff0c;虽然能被Win10系统识别&#xff0c;但是驱动程序安装完成后依然报错&#xff0c; 提示&#xff1a;该设备无法启动。&#xff08;代码 10&#xff09; 请求USB BOS 描述符失败。 运行SpectraSuite软件…