探索 Oracle Database 23ai 中的 SQL 功能

探索 Oracle Database 23ai 中的 SQL 功能

    • 介紹
      • 目標
      • 前提條件
    • 功能 1:使用 `FROM` 子句
    • 功能 2:使用 `BOOLEAN` 數據類型
    • 功能 3:使用 `IF NOT EXISTS` DDL 子句
    • 功能 4:使用 `INSERT` 插入多行
    • 功能 5:使用新的 `VALUE` 構造函數
    • 功能 6:在 `GROUP BY` 子句中使用別名
    • 功能 7:使用 `UPDATE` 和 `MERGE` 語句的 `RETURNING` 子句
    • 功能 8:在 `UPDATE` 和 `DELETE` 中使用連接
    • 功能 9:使用注釋
    • 功能 10:使用 SQL 域
    • Oracle Database 23ai 功能的限制和限制

介紹

在這個教程中,我們將學習 10 個您需要知道的功能及其與現有對應功能的比較。這些功能包括:

  • FROM 子句(可選)。
  • SQL 中的 BOOLEAN
  • 數據定義語言(DDL)中的 IF NOT EXISTS 子句。
  • 多值 INSERT
  • 新表 VALUE 構造函數。
  • GROUP BY 子句中的別名。
  • UPDATEMERGE 語句的 RETURNING 子句。
  • UPDATEDELETE 中的連接。
  • 注釋,數據庫對象的新元數據。
  • 使用 SQL 域的輕量級對象類型。

目標

  • 不使用 FROM 子句的 SQL:通過刪除在選擇表達式或內置函數時使用 FROM 子句的要求,使查詢更簡單。

  • 在 SQL 中實現原生 BOOLEAN 數據類型:在 SQL 表、查詢和條件中利用原生 BOOLEAN 數據類型,以便更直觀地處理真/假邏輯。

  • 在 DDL 語句中使用 IF NOT EXISTS:通過有條件地執行 CREATEDROP 語句,簡化對象創建和刪除邏輯,無需額外的 PL/SQL 檢查。

  • 執行多值 INSERT 操作:通過在單個 INSERT 語句中插入多行,提高代碼可讀性并減少與數據庫的往返次數。

  • 使用表值構造函數創建內聯數據集:使用 VALUES 構造函數直接在 SQL 中創建臨時行集,支持 MERGESELECT 或比較等操作。

  • GROUP BY 子句中引用列別名:通過允許在 GROUP BY 中使用 SELECT 別名而非重復表達式,增強查詢的可讀性。

  • UPDATEMERGE 中利用 RETURNING 子句:直接從 UPDATEMERGE 語句中檢索受影響的數據,無需后續查詢。

  • UPDATEDELETE 語句中執行連接:直接在 UPDATEDELETE 操作中使用 JOIN 邏輯,根據相關表的條件修改或刪除記錄。

  • 使用元數據注釋數據庫對象:使用 ANNOTATION 文檔化數據庫對象,以存儲描述性元數據(例如所有者、用途),便于維護和內省。

  • 使用 SQL 域定義輕量級對象類型:創建可重用的域類型和約束,以在多個表中強制執行一致性和強類型。

前提條件

  • 基礎 SQL 知識。

    • 了解 SQL 語法:SELECTINSERTUPDATEDELETEJOINGROUP BY 等。

    • 熟悉關系數據庫概念和數據類型。

  • 使用 Oracle Database 23ai 及其早期版本的經驗。

    • 了解 Oracle Database 19c、Oracle Database 21c 及更早版本中 DDL、數據操作語言(DML)和 PL/SQL 的工作方式。

    • 了解 Oracle 特定功能,如 DUALMERGERETURNING INTO 等。

  • 訪問 Oracle Database 23ai 環境。

    • 訪問 Oracle Database 23ai(本地設置、云實例或 Oracle Live SQL)。

    • 某些功能(如 SQL 域或 BOOLEAN)僅在 Oracle Database 23ai 中可用。

  • SQL*Plus、SQLcl 或 GUI 工具(如 SQL Developer 或 DataGrip)。能夠在兼容的界面中運行和測試 SQL 語句。

  • PL/SQL 基礎(用于高級功能)。用于 RETURNING INTO、過程塊和處理動態 SQL。

  • 約束和數據完整性規則的知識。需要了解 SQL 域和表約束。

  • 熟悉 Oracle 數據字典視圖。用于查詢注釋或元數據。例如,USER_TABLESUSER_ANNOTATIONS

  • Oracle Database 中的角色和權限。創建/修改表、域和注釋的能力需要適當的用戶權限。

  • 版本意識。確保您的工具和客戶端支持 Oracle Database 23ai 功能(較舊的驅動程序或工具可能會失敗)。

  • (可選)接觸其他現代 SQL 方言(PostgreSQL、MySQL 等)。這將幫助您理解新功能(如 VALUESBOOLEANIF EXISTS)的跨兼容性。

功能 1:使用 FROM 子句

Oracle Database 23ai 引入的一個有趣功能是 SELECT 語句中 FROM 子句的可選性。在此版本之前,FROM 子句是必需的。

以下是 Oracle Database 23ai 中不使用 FROM 子句功能的一些潛在好處。

  • 選擇當前日期以便于數據操作。

    SELECT CURRENT_DATE;
    

在這里插入圖片描述

  • 無需涉及表數據的數學運算或計算。

    SELECT 25.50*25.25;
    25.50*25.25
    -----------
    643.875
    耗時: 00:00:00.002
    1 行已選中。
    
  • 不使用 FROM 子句的 PL/SQL 塊。

    CREATE SEQUENCE empno_seq INCREMENT BY 1 START WITH 1 MINVALUE 1 MAXVALUE 1000;
    序列 EMPNO_SEQ 已創建。
    耗時: 00:00:00.005
    declare v1 number;
    begin
    select empno_seq.nextval into v1;
    dbms_output.put_line ('v1= '||v1);
    end;
    /
    v1= 1
    PL/SQL 過程已成功完成。
    耗時: 00:00:00.009
    
  • 使用內置或用戶定義的函數執行操作或檢索值。

    SELECT DBMS_RANDOM.VALUE() as random_number;
    
  • 無需依賴表數據的字符串操作或轉換。

    SELECT UPPER('oracle') AS uppercase_text;
    

在這里插入圖片描述

  • 不使用表的條件或邏輯表達式。

    SELECT CASE WHEN 10 > 5 THEN 'True' ELSE 'False' END AS result;
    

功能 2:使用 BOOLEAN 數據類型

Oracle Database 23ai 引入了新的 BOOLEAN 數據類型。這使得可以使用真正的布爾列/變量,而不是用數值或 Varchar 模擬它們。能夠編寫布爾謂詞簡化了 SQL 語句的語法。

  1. 創建一個名為 TEST_BOOLEAN 的表。

    CREATE TABLE IF NOT EXISTS TEST_BOOLEAN (name VARCHAR2(100), IS_SLEEPING BOOLEAN);
    表 TEST_BOOLEAN 已創建。
    耗時: 00:00:00.004
    
  2. 向新表中輸入數據。IS_SLEEPING 的值將是 NOT NULL 并默認為 FALSE

    ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING boolean NOT NULL);
    

    在這里插入圖片描述

    ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING default FALSE);
    表 TEST_BOOLEAN 已修改。
    耗時: 00:00:00.014
    

    在這里,您可以看到 Mick、Keith 和 Ron 的不同布爾輸入。所有輸入都是有效的。對于 Mick,使用默認的 FALSE 值 - Mick 沒有睡覺。

    INSERT INTO TEST_BOOLEAN (name, is_sleeping) values ('Mick', default);
    1 行已插入。
    耗時: 00:00:00.006
    

    對于 Keith,我們使用 NO 值 - Keith 沒有睡覺。

    INSERT INTO TEST_BOOLEAN (name, is_sleeping) values ('Keith','NO');
    1 行已插入。
    耗時: 00:00:00.002
    

    對于 Ron,我們使用 1 值 - Ron 正在睡覺。

    INSERT INTO TEST_BOOLEAN (name, is_sleeping) values ('Ron',1);
    1 行已插入。
    耗時: 00:00:00.002
    
  3. 查看基于我們布爾值的結果。

    SELECT * FROM test_boolean;
    

    您不再需要記住您設置的布爾系統類型。如我們所示,使用 0/1、True/False、Yes/No 或任何其他常見輸入將返回準確的表值。

功能 3:使用 IF NOT EXISTS DDL 子句

從 Oracle Database 23ai 開始,新的 IF NOT EXISTS DDL 子句允許決定如何處理 DDL 錯誤。這簡化了 DDL 腳本編寫,因為由于對象存在或不存在導致的潛在錯誤可以被腳本隱藏。

  1. 首先,測試不使用此新功能。運行以下語句。

    DROP TABLE DEPT;
    

    由于沒有現有的 DEPT 表可刪除,我們將看到錯誤:ORA-00942: 表或視圖不存在

  2. 然而,在 Oracle Database 23ai 中,我們可以使用 DROP IF EXISTS 而不出現錯誤。這讓我們在避免錯誤的同時心安理得。現在,運行相同的語句,但包含此新的 IF EXISTS 功能。

    DROP TABLE IF EXISTS DEPT;
    
  3. 類似地,我們可以使用此功能在表不存在時創建表。創建 DEPT 表。

    CREATE TABLE IF NOT EXISTS DEPT
    (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
    DNAME VARCHAR2(14) ,
    LOC VARCHAR2(13) ) ;
    

    在這里插入圖片描述

  4. 使用此功能在本教程中創建更多示例表。在這里,我們將創建一個名為 EMP 的員工表。

    CREATE TABLE IF NOT EXISTS EMP (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
    表 EMP 已創建。
    耗時: 00:00:00.006
    

功能 4:使用 INSERT 插入多行

另一個確保與其他常用數據庫管理系統更好共存和兼容性的有趣功能是多值 INSERT 語句。

  1. 在 Oracle 數據庫的早期版本中,例如,插入多行需要為每一行單獨插入語句。

    INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
    INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
    INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
    INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
    INSERT INTO DEPT VALUES (50,'HR','LOS ANGELES');
    INSERT INTO DEPT VALUES (60,'IT','SAN FRANCISCO');
    INSERT INTO DEPT VALUES (70,'MANUFACTURING','DETROIT');
    

    Oracle Database 23ai 引入了新的語法,允許在單個 INSERT 語句中插入所有這些行,因此您可以在一個 DML 中插入幾個元組。運行以下語句。

    INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'), (20,'RESEARCH','DALLAS'), (30,'SALES','CHICAGO'), (40,'OPERATIONS','BOSTON'), (50,'HR','LOS ANGELES'), (60,'IT','SAN FRANCISCO'), (70,'MANUFACTURING','DETROIT');
    

    在這里插入圖片描述

    除了與其他數據庫更好的兼容性外,此語句還可以用于確保在自動提交模式下的一些插入操作的一致性。這對于使用此模式處理數據的 Oracle APEX 應用程序可能很重要。

  2. 運行以下語句以使用此功能為 EMP 表填充值。

    INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20), (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30), (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30), (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20), (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30), (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30), (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10), (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20), (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10), (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30), (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20), (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30), (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20), (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
    

功能 5:使用新的 VALUE 構造函數

從 Oracle 數據庫 23ai 開始,表值構造函數已擴展。現在可以在 INSERT 語句中使用,以便在單個命令中創建多行。它還可以在 SELECT 語句和視圖因式分解語法中使用。在這種情況下,它簡化了語句的語法,并避免使用 DUAL 表。

以下語句看起來像是一種即時的表函數。

SELECT * FROM (VALUES (50,'HR'), (60,'DEV'), (70,'AI')) virt_dept (deptno, dname);

在這里插入圖片描述

功能 6:在 GROUP BY 子句中使用別名

Oracle Database 23ai 引入了在 SELECT 語句的 GROUP BY 子句中使用別名的能力。此功能簡化了編寫具有復雜表達式的查詢,并確保與某些其他關系數據庫(如 Teradata、MySQL 和 PostgreSQL)的更好兼容性。

例如:

SELECT to_char(hiredate,'YYYY') "Year", count(*) FROM emp GROUP BY to_char(hiredate,'YYYY');

在 Oracle Database 23ai 中,這可以以更簡單的方式編寫,如下圖所示:

在這里插入圖片描述

功能 7:使用 UPDATEMERGE 語句的 RETURNING 子句

此子句曾作為 EXECUTE IMMEDIATE 語句的一部分實現。然而,在 Oracle Database 23ai 中,我們可以在傳統的、靜態的 DML 語句中找到它。

  1. 在這種情況下,它允許從處理的行獲取列的舊值和新值。首先,讓我們看看 King 的當前薪水。

    SELECT ename, sal FROM emp WHERE ename = 'KING';
    
  2. 為了在 LiveSQL 中使用變量,我們將將我們的語句包裝在 PL/SQL 中。運行此腳本。它首先為舊薪水和新薪水創建變量,然后使用 RETURNING 子句更新 King 的薪水以設置我們的變量。然后我們將查看結果。

    BEGIN
    DECLAREold_salary NUMBER;new_salary NUMBER;
    BEGINUPDATE empSET sal = sal + 1000WHERE ename = 'KING'RETURNING OLD sal, NEW sal INTO old_salary, new_salary;DBMS_OUTPUT.PUT_LINE('Old Salary: ' || old_salary);DBMS_OUTPUT.PUT_LINE('New Salary: ' || new_salary);
    END;
    END;
    

    在這里插入圖片描述

    Old Salary: 6000
    New Salary: 7000
    

    此示例使用了 UPDATE 語句,但 RETURNING 子句可以類似地用于 MERGE 語句。

功能 8:在 UPDATEDELETE 中使用連接

您可以使用基于外部表條件的連接更新表數據。無需子查詢或 IN 子句。

  1. 運行以下語句以查看研究部門的員工薪資信息。

    select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
    
  2. 在 Oracle Database 23ai 之前,我們需要使用嵌套語句來更新薪資信息。

    UPDATE emp e set e.sal=e.sal*2 WHERE e.deptno in (SELECT d.deptno FROM dept d WHERE e.deptno=d.deptno and d.dname='RESEARCH');
    

    在 Oracle Database 23ai 中,您可以這樣使用它:

    UPDATE emp e set e.sal=e.sal*2
    FROM dept d
    WHERE e.deptno=d.deptno
    and d.dname='RESEARCH';
    

    在這里插入圖片描述

  3. 您可以看到薪資已成功更新。

    select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
    

    在這里插入圖片描述

功能 9:使用注釋

注釋是數據庫對象的可選元數據。注釋是名稱-值對或僅名稱。名稱和可選值是自由格式的文本字段。注釋表示為數據庫對象的從屬元素,該注釋已添加。支持的模式對象包括表、視圖、物化視圖和索引。使用注釋,您可以存儲和檢索有關數據庫對象的元數據。您可以使用它來自定義業務邏輯、用戶界面或將元數據提供給元數據存儲庫。它可以在表或列級別使用 CREATEALTER 語句添加。

使用注釋,您可以存儲和檢索有關數據庫對象的元數據。您可以使用它來自定義業務邏輯、用戶界面或將元數據提供給元數據存儲庫。

  1. 創建帶有列和表注釋的注釋表 EMP_ANNOTATED_NEW

    CREATE TABLE emp_annotated_new
    (empno number annotations(identity, display 'person_identity', details 'person_info'),
    ename varchar2(50),
    salary number annotations (display 'person_salary', col_hidden))
    annotations (display 'employee_table');
    

    在這里插入圖片描述

  2. 數據字典視圖,如 USER_ANNOTATIONSUSER_ANNOTATIONS_USAGE,可以幫助監控使用情況。

    SELECT object_name, object_type, column_name, annotation_name, annotation_value FROM user_annotations_usage;
    

    在這里插入圖片描述

功能 10:使用 SQL 域

SQL 域是屬于模式的字典對象,它封裝了一組可選的屬性和約束,并使用 CREATE DOMAIN 語句創建。域提供約束、顯示、排序和注釋屬性。定義 SQL 域后,您可以定義表列與該域關聯,從而將域的可選屬性和約束顯式應用于這些列。

SQL 域允許用戶聲明列的預期用途。它們是字典對象,因此可以輕松重用抽象的域特定知識。

  1. 創建名為 yearbirth 的域和名為 person 的表。

    CREATE DOMAIN yearbirth as number(4) constraint check ((trunc(yearbirth) = yearbirth) and (yearbirth >= 1900)) display (case when yearbirth < 2000 then '19-' ELSE '20-' end)||mod(yearbirth, 100) order (yearbirth -1900) annotations (title 'yearformat');
    

    在這里插入圖片描述

    CREATE TABLE person (id number(5), name varchar2(50), salary number, person_birth number(4) DOMAIN yearbirth ) annotations (display 'person_table');
    

    在這里插入圖片描述

    desc person;Name Null? Type* * *ID NUMBER(5)
    NAME VARCHAR2(50)
    SALARY NUMBER
    PERSON_BIRTH NUMBER(4) DOMAIN YEARBIRTHINSERT INTO person values (1,’MARTIN’,3000, 1988);
    
  2. 使用新函數 DOMAIN_DISPLAY 可以顯示屬性。

    SELECT DOMAIN_DISPLAY(person_birth) FROM person;
    
  3. 域的使用情況和注釋可以通過數據字典視圖監控。讓我們查看 user_annotations_usage

    SELECT * FROM user_annotations_usage;
    
    定義可重用的域類型(輕量級對象)。
    CREATE DOMAIN EmailAddress AS VARCHAR2(100) CHECK (REGEXP_LIKE(VALUE,^\[^@\]+@\[^@\]+.\[^@\]+$’));
    CREATE TABLE users ( user_id NUMBER, email EmailAddress );
    

    在這里插入圖片描述

Oracle Database 23ai 功能的限制和限制

  • FROM 子句

    • 僅適用于簡單表達式,如函數、字面量或變量。

    • 不能用于涉及表、連接或子查詢的查詢。

    • 不支持在 PL/SQL 上下文中使用游標循環,這些循環期望 FROM 子句。

  • 原生 BOOLEAN 數據類型

    • 可以用于表列和表達式。

    • 不可索引,BOOLEAN 數據類型的列不能被索引。

    • 并非所有客戶端工具或報表工具都直接支持(可能需要將其轉換為 0/1 或 Y/N)。

    • 某些較舊的 API 或驅動程序不支持(JDBC/ODBC 客戶端可能需要更新)。

  • DDL 中的 IF NOT EXISTS

    • 簡化了冪等 DDL 腳本。

    • 僅適用于特定對象:TABLEINDEXSEQUENCEVIEW 等。

    • 并非所有對象類型都支持此功能(例如,TRIGGERSYNONYM 可能仍需要手動檢查)。

    • 不支持較舊的 Oracle 版本。

  • 多值 INSERT

    • 批量插入的清晰語法。

    • 僅限于顯式值集,不能在相同的 VALUES 子句中使用 SELECT 或子查詢插入。

    • 不能與 RETURNING 子句結合使用,以便在一步中為所有插入的行返回值。

  • 表值構造函數(VALUES 子句)

    • 適用于小型、臨時的行集。

    • 有行限制(通常為 999 行或更少,具體取決于上下文)。

    • 不適用于大規模加載,更好地使用臨時表或暫存區域處理大型數據集。

  • GROUP BY 子句中的別名

    • 使查詢更容易閱讀和編寫。

    • 不支持所有分析函數或涉及子查詢列的復雜查詢。

    • 可能在查詢中引起混淆,其中別名被重復使用(例如,在內部查詢中使用相同名稱)。

  • UPDATE/MERGE 中的 RETURNING 子句

    • 減少了 DML 后的 SELECT 需要。

    • 僅能返回實際修改的行的值。

    • 不能用于批量更新,除非使用 FORALL,必須使用 PL/SQL 并顯式 RETURNING BULK COLLECT

  • UPDATEDELETE 中的連接

    • 使多表邏輯更簡單。

    • 僅支持某些上下文中的 INNER JOINLEFT JOIN 類型。

    • 如果使用較舊的工具或需要與較早的 Oracle 版本兼容,可能需要重寫 MERGE 邏輯。

  • 注釋

    • 非常適合文檔化。

    • 注釋僅是元數據,無法在運行時強制執行。

    • 需要使用 Oracle 數據字典視圖(*_ANNOTATIONS)來檢索。

    • 尚未集成到 Oracle Data Pump 導出/導入或復制工具中。

  • 使用 SQL 域的輕量級對象類型

    • 可重用,一致的類型強制。

    • 仍然不如完整的對象類型強大(沒有方法、屬性)。

    • 沒有繼承或組合,僅用于原始約束強制。

    • 無法在域本身中定義默認值(默認值仍在列級別指定)。

一般限制

  • 工具兼容性:許多 GUI 工具和較舊的 Oracle 客戶端庫可能尚未完全支持 Oracle Database 23ai 語法(特別是 VALUESBOOLEANDOMAIN)。

  • 導出/導入:某些功能(如注釋或域)可能不會在較舊的 expdp/impdp 工作流中保留。

  • 實驗性行為:由于這些功能是新的,某些功能可能會在次要版本中發展——請頻繁查看補丁說明和文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86376.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL(6)

! 會排除null數據 select name from Customer where referee_id ! 2 or referee_id is null; 交叉聯結 交叉連接&#xff08;CROSS JOIN&#xff09;-CSDN博客 197. 上升的溫度 select a.id from weather as a cross join weather as b on datediff(a.recordDate ,b.recordD…

【Java面試題】cookie、session、jwt/token的異同

以下是對Cookie、Session、Token與JWT的異同的完善分析&#xff0c;結合技術原理、安全性和應用場景進行系統性對比&#xff1a; &#x1f50d; 一、核心概念與工作流程 機制定義工作流程核心特點Cookie客戶端存儲的小型文本數據1. 服務器通過Set-Cookie響應頭下發數據2. 瀏覽…

數字經濟時代科技創業的巨大潛力

2025年3月&#xff0c;42歲的字節跳動創始人張一鳴以655億美元身家成為中國新首富。這位"80后"企業家白手起家的故事&#xff0c;展現了數字經濟時代科技創業的巨大潛力。本文將帶您了解張一鳴的成功秘訣&#xff0c;分析網絡安全行業的最新趨勢&#xff0c;并為計算…

深入剖析Nginx架構及其不同使用場景下的配置

一、Nginx 整體架構概覽 1. Nginx簡介 Nginx 是采用 C 語言 編寫的高性能 Web 服務器、反向代理服務器及郵件代理服務器&#xff0c;特點是&#xff1a;高并發、高可用、低內存占用、模塊化設計。 架構核心理念&#xff1a; Master-Worker 多進程模型 事件驅動&#xff08;…

單元測試詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 對于軟件測試&#xff0c;我們先按照開發階段來進行劃分&#xff0c;將軟件測試分為單元測試、集成測試、系統測試、驗收測試&#xff0c;下面我們來聊聊單元測試。…

四款好用的Windows虛擬打印機,文檔轉PDF

1&#xff0c;Microsoft Print To PDF 2&#xff0c;Foxit Reader PDF Printer 3&#xff0c;Adobe PDF 4&#xff0c;clawPDF 參考文檔&#xff1a; https://mp.weixin.qq.com/s/_mt4J2RwhqQE36DRAvc-Rg

《map和set的使用介紹》

引言&#xff1a; 上次我們學習了第一個高階數據結構—二叉搜索樹&#xff0c;趁熱打鐵&#xff0c;今天我們就再來學習兩個數據結構—map和set。 一&#xff1a;序列式容器和關聯式容器 前面我們已經接觸過STL中的部分容器如&#xff1a;string、vector、list、deque、arra…

PostgreSQL(二十六)分區表管理

目錄 一、分區表特點 1、概念&#xff1a; 2、好處&#xff1a; 3、特點&#xff1a; 二、范圍分區介紹 1、簡介 2、范圍分區實驗&#xff1a; 三、list分區介紹 1、簡介 2、list分區表實驗 四、hash分區介紹 1、簡介 2、hash分區表實驗 五、混合分區介紹 1、簡…

概率論中的生日問題,違背直覺?如何計算? 以及從人性金融的角度分析如何違背直覺的?

一、生日問題的概率計算&#xff1a;為何23人就有50%概率撞生日&#xff1f; 1. 問題背景與直覺矛盾 生日問題指&#xff1a;在n個人中&#xff0c;至少有兩人生日相同的概率超過50%時&#xff0c;n的最小值是多少&#xff1f; 直覺判斷&#xff1a;因一年有365天&#xff0c…

Qt for WebAssembly官方說明文檔

鏈接 Qt for WebAssembly | Qt 5.15

前端自主實現將vue頁面轉為pdf文件下載

1.vue 轉 PDF 在 Vue 項目中將 HTML 頁面轉換為 PDF 文件是一個常見需求&#xff0c;特別是在需要生成報告或打印頁面時。本文將介紹如何使用 html2canvas 和 jspdf 庫實現這一功能。 2.安裝依賴 首先&#xff0c;我們需要安裝兩個庫&#xff1a;html2canvas 和 jspdf 。可以…

TCP 堅持定時器詳解:原理、配置與最佳實踐?

一、TCP 堅持定時器基礎原理 1.1 堅持定時器的設計目的 TCP 堅持定時器 (TCP Persist Timer) 是 TCP 協議中用于處理接收窗口為零情況的重要機制&#xff0c;其核心設計目的是防止 TCP 連接在窗口更新 ACK 丟失時陷入死鎖狀態。當 TCP 連接的接收方通告一個窗口大小為 0 的 A…

大廠測開實習和小廠開發實習怎么選

先說選擇&#xff0c;這個可以百分百確定選大廠&#xff0c;title很重要。 要想弄清楚那個選擇對自己最有利&#xff0c;可以思考下實習的意義是什么&#xff1f; 實習無非就是給簡歷加分&#xff0c;拿到好offer&#xff0c;高薪offer。 那這就需要思考&#xff0c;簡歷怎么讓…

Unity中的urp和普通的標準渲染管線區別在哪

Unity中的URP&#xff08;Universal Render Pipeline&#xff09;與內置標準渲染管線&#xff08;Built-in Render Pipeline&#xff09;的區別深刻反映了Unity渲染技術的演進方向。以下從架構、性能、功能、工作流等多個維度進行深度分析&#xff1a; 1. 底層架構與設計哲學 標…

Vscode 編寫Markdown支持 plantuml書寫

1&#xff1a; 下載PlantUml 插件&#xff1a; 2&#xff1a; 安裝java https://www.oracle.com/java/technologies/downloads/ 3&#xff1a; 安裝Graphviz https://graphviz.org/download/ 4&#xff1a; 下載plantuml.jar https://plantuml.com/zh/download 5&…

設計模式(C++/Qt)-工廠模式

在軟件開發中&#xff0c;對象創建是基礎但關鍵的任務——工廠模式提供了一種優雅的解決方案&#xff0c;讓您的代碼擺脫硬編碼的依賴關系 一、為什么需要工廠模式&#xff1f; 在C/Qt開發中&#xff0c;我們經常面臨這樣的困境&#xff1a; 對象創建邏輯分散在代碼各處新增…

Pydantic 模型

本文將詳細介紹 Pydantic 模型 和 BaseModel 的核心概念&#xff0c;并通過實際代碼示例如何從零開始編寫自己的 Pydantic 模型。 1. Pydantic 是什么&#xff1f; Pydantic 是一個 Python 庫&#xff0c;主要用于&#xff1a; 數據驗證&#xff1a;確保輸入數據符合預期的類…

【Unity智能模型系列】MediaPipeUnityPlugin 實現人臉數據獲取

目錄 一、MediaPipeUnity 簡介 二、MediaPipeUnity 的核心組成 1. Graph 構建系統 2. 解決方案類(Solution) 3. 解釋注釋Annotation 系統 三、MediaPipeUnity 的典型使用流程 四、典型示例解析 1、案例 Face Detection圖形人臉檢測 2、案例 Face Detection圖形人臉檢…

iOS App 上架步驟解析:適合資源有限團隊的上架流程與注意事項

對于不少創業型或初創階段的開發團隊來說&#xff0c;人員配置緊湊、設備有限是常態。在這種背景下&#xff0c;完成一次合規、高效的iOS應用發布往往不是技術難點&#xff0c;而是流程協同與資源調配的問題。 我們是一支5人團隊&#xff0c;開發一款社交類工具型App&#xff…

Redis雪崩、穿透、擊穿原理及解決方案

以下是 Redis 緩存穿透、擊穿與雪崩的原理及解決方案的深度解析&#xff0c;結合工業級實踐整理&#xff1a; &#x1f50d; ?一、問題原理與區別? ?問題類型??觸發條件??核心特征??危害??緩存穿透?查詢?不存在的數據?繞過緩存直擊數據庫&#xff0c;導致無效查…