05.MySQL表的約束

MySQL表的約束

MySQL表的約束
1. 空屬性
2. 默認值
3. 列描述
4. zerofill
5. 主鍵
6. 自增長
7. 唯一鍵
8. 外鍵
9. 綜合案例


MySQL表的約束

說到 MySQL 表的約束,這絕對是數據庫設計里繞不開的一個話題。很多人一提“約束”,第一反應可能是字段的數據類型,比如 INT 不能存字符串,VARCHAR 有長度限制。這當然是最基本的一層限制,但光靠這些,遠遠不夠。就像你家門口裝了密碼鎖,結果廚房窗戶忘關了——防得了一部分,還是會漏。

這時候就得靠表級的各種約束來兜底,從業務邏輯的角度出發,幫你把不合理的數據擋在門外。

舉個栗子🌰:假設你建了一個用戶表,里面有個“年齡”字段,類型是 INT。這時候要是有人輸入個 -100 或者 999999999 歲,數據庫是能存下沒錯,但你一看就知道這不靠譜。這種數值范圍的控制,其實屬于“檢查約束(CHECK)”。不過早期的 MySQL 并不支持這玩意兒(8.0 開始才支持),所以我們今天先不展開這個,重點聊聊其他你在開發里經常用到的約束類型。

這篇文章我們就來盤講講這些實用技能:空屬性、默認值、列描述、zerofill、主鍵、自增長、唯一鍵、外鍵。最后還會用一個綜合案例,把這些知識點串起來,幫你真正掌握這些“看起來簡單但常常出問題”的細節。

1. 空屬性

1.1 NULL和NOT NULL的相愛相殺

數據庫里默認所有字段都是允許為空的(NULL),就像你家的冰箱——什么都能塞進去。但實際開發中,咱們得學會"斷舍離",把不該空的字段鎖死。為啥?因為空值是個麻煩精!它參與運算時會直接讓結果變NULL,就像往火鍋里倒可樂——全毀了。

舉個例子🌰:假設你統計銷售額,某個訂單金額是NULL,那么SELECT SUM(price)的結果也會是NULL。這時候老板要是問"今天賺了多少",你只能尷尬地回一句:“不知道啊,有筆訂單金額沒填…”

所以遇到必填項,一定要用NOT NULL。比如班級表的教室字段:

CREATE TABLE class(class_name VARCHAR(20) NOT NULL,classroom VARCHAR(20) NOT NULL
);

這時候插入數據時,這兩個字段就必須填,否則MySQL會直接報錯:

INSERT INTO class(class_name) VALUES('三年二班');
-- 報錯:Field 'classroom' doesn't have a default value

1.2 NULL的隱藏陷阱

很多人以為NULL就是"沒有值",其實它更像"未知值"。比如兩個NULL比較時,既不等于也不等于不,永遠返回UNKNOWN。這會導致查詢時出現意想不到的結果:

SELECT * FROM users WHERE email = NULL; -- 查不到任何數據
SELECT * FROM users WHERE email IS NULL; -- 才能查到空郵箱用戶

1.3 NOT NULL的進階玩法

有時候我們會給字段設置默認值,這時候再加NOT NULL就顯得多余了。比如:

CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,gender ENUM('男','女') DEFAULT '男' NOT NULL
);

這里的NOT NULL其實可以省略,因為默認值已經保證了字段不為空。但要注意默認值的類型匹配,比如用字符串’0’當默認值,字段類型卻是INT的話,可能會觸發隱式轉換。


2. 默認值

2.1 DEFAULT的魔法時刻

默認值就像自動售貨機——當你不投幣時,它自己吐出預設的商品。比如用戶表的性別字段:

CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),gender ENUM('男','女') DEFAULT '男'
);

這時候插入數據時,如果不指定gender字段,就會自動填充"男":

INSERT INTO user(name) VALUES('張三');
-- 實際插入的是('張三', '男')

2.2 默認值的進階套路

默認值不僅能用常量,還能用表達式(MySQL 8.0+支持):

CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,create_time DATETIME DEFAULT NOW(),expire_time DATETIME DEFAULT (NOW() + INTERVAL 7 DAY)
);

不過要注意,同一個字段不能同時有默認值和NOT NULL約束(除非默認值明確指定),否則會觸發沖突。

2.3 默認值的隱藏彩蛋

對于日期時間類型字段,默認值有特殊規則:

  • DATETIME默認值只能是常量,不能用函數
  • TIMESTAMP會自動設置當前時間作為默認值(如果未顯式指定)

比如:

CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT,dt DATETIME,           -- 默認值為NULLts TIMESTAMP           -- 默認值自動變為CURRENT_TIMESTAMP
);

3. 列描述

3.1 COMMENT的文藝復興

列描述就像給數據庫字段寫小紙條,方便后來人看懂你的設計思路。比如用戶表:

CREATE TABLE user(id INT PRIMARY KEY COMMENT '用戶ID',name VARCHAR(20) COMMENT '用戶真實姓名',nickname VARCHAR(20) COMMENT '用戶昵稱(可為空)'
);

通過SHOW CREATE TABLE user;就能看到這些注釋:

CREATE TABLE `user` (`id` int(11) NOT NULL COMMENT '用戶ID',`name` varchar(20) NOT NULL COMMENT '用戶真實姓名',`nickname` varchar(20) DEFAULT NULL COMMENT '用戶昵稱(可為空)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.2 描述的最佳實踐

  1. 業務含義:說明字段的業務邏輯,比如status TINYINT COMMENT '狀態:1-待支付 2-已支付 3-已發貨'
  2. 數據來源:標明數據是怎么來的,比如score DECIMAL(5,2) COMMENT '根據考試成績自動同步'
  3. 變更記錄:重要字段的變更歷史,比如address VARCHAR(255) COMMENT '2022.3新增,原地址字段已廢棄'

3.3 描述的隱藏功能

結合INFORMATION_SCHEMA.COLUMNS表,可以實現自動化文檔生成:

SELECT COLUMN_NAME, COLUMN_COMMENT 
FROM information_schema.columns
WHERE TABLE_SCHEMA='your_db' AND TABLE_NAME='user';

4. zerofill

4.1 數字顯示的藝術

zerofill就像給數字穿上西裝打上領帶——讓它看起來更正式。比如訂單編號:

CREATE TABLE orders(order_id INT(6) ZEROFILL PRIMARY KEY AUTO_INCREMENT
);

插入數據時:

INSERT INTO orders() VALUES();
-- 實際顯示order_id為000001

注意這里的INT(6)不是指6位數字,而是顯示寬度。底層存儲還是標準的INT類型(4字節)。

4.2 zerofill的連帶效應

使用zerofill會自動觸發UNSIGNED屬性:

CREATE TABLE test(a INT(5) ZEROFILL);
-- 實際相當于 INT(5) UNSIGNED ZEROFILL

所以字段只能存儲正數,負數插入會變成0。

4.3 使用場景分析

適合需要固定顯示位數的業務場景:

  • 學號:202301010001(年份+學院代碼+序號)
  • 發票號碼:0000123456
  • 產品編號:P000001

但要注意,這種格式化更適合前端處理,數據庫層面保持純粹數字更利于計算。


5. 主鍵

5.1 數據的身份證

主鍵就像每個人的身份證號碼——必須唯一且不能為空。創建學生表:

CREATE TABLE student(stu_id CHAR(10) PRIMARY KEY COMMENT '學號(唯一標識)',name VARCHAR(20)
);

這時候插入重復學號會直接報錯:

INSERT INTO student VALUES('2023010101','張三');
INSERT INTO student VALUES('2023010101','李四');
-- 報錯:Duplicate entry '2023010101' for key 'PRIMARY'

5.2 主鍵的進階操作

  1. 刪除主鍵

    ALTER TABLE student DROP PRIMARY KEY;
    

    注意:如果該列有自增屬性,需要先刪除自增

  2. 修改主鍵

    ALTER TABLE student MODIFY stu_id CHAR(12);
    -- 修改字段類型不影響主鍵約束
    
  3. 復合主鍵

    CREATE TABLE cart(user_id INT,product_id INT,quantity INT,PRIMARY KEY(user_id, product_id)
    );
    

    這時候單個字段可以重復,但組合必須唯一

5.3 主鍵選擇的玄學

  1. 自增主鍵 vs 業務主鍵
    自增主鍵(如AUTO_INCREMENT)更利于索引性能,業務主鍵(如身份證號)更直觀,需要根據場景權衡

  2. UUID的另類玩法

    CREATE TABLE orders(order_id CHAR(36) PRIMARY KEY DEFAULT UUID(),...
    );
    

    適合分布式系統,但會占用更多存儲空間


6. 自增長

6.1 AUTO_INCREMENT的魔法

自增字段就像自動步槍——每次扣動扳機都會自動裝彈。創建文章表:

CREATE TABLE articles(article_id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(100)
);

插入數據時:

INSERT INTO articles(title) VALUES('MySQL約束詳解');
-- article_id自動分配為1
INSERT INTO articles(title) VALUES('性能優化技巧');
-- article_id自動分配為2

6.2 自增的隱藏技巧

  1. 指定初始值

    CREATE TABLE users(id INT AUTO_INCREMENT PRIMARY KEY
    ) AUTO_INCREMENT = 1000;
    
  2. 跳增現象
    如果插入失敗或事務回滾,自增值不會回退。比如插入100后失敗,下一個值會是101而不是100

  3. 手動賦值

    INSERT INTO articles(article_id, title) VALUES(10000, '特別推薦');
    -- 下次自增值從10001開始
    

6.3 自增的性能考量

  1. 并發問題
    InnoDB引擎使用互斥鎖來確保自增的連續性,在高并發場景可能成為瓶頸

  2. 緩存配置
    innodb_autoinc_lock_mode參數影響自增行為,需要根據業務調整

  3. 遷移風險
    導出導入數據時,記得檢查自增字段的當前值:

    SHOW TABLE STATUS LIKE 'articles';
    -- 查看Auto_increment列
    

7. 唯一鍵

7.1 除主鍵外的唯一保障

唯一鍵就像班級里的學號和電話號碼——都可以唯一標識學生,但只能選一個當主鍵。創建用戶表:

CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) UNIQUE,email VARCHAR(50) UNIQUE
);

這時候用戶名和郵箱都必須唯一:

INSERT INTO user(username, email) 
VALUES('zhangsan', 'zhangsan@example.com');-- 插入相同用戶名會失敗
INSERT INTO user(username, email) 
VALUES('zhangsan', 'zs@example.com');
-- 報錯:Duplicate entry 'zhangsan' for key 'username'

7.2 唯一鍵的騷操作

  1. 復合唯一鍵

    CREATE TABLE exam(student_id INT,subject VARCHAR(20),score INT,UNIQUE(student_id, subject)
    );
    

    保證同一個學生同一科目只有一條記錄

  2. 空值處理
    唯一鍵允許有多個NULL值(這與主鍵不同):

    INSERT INTO user(username) VALUES(NULL);
    INSERT INTO user(username) VALUES(NULL);
    -- 兩條記錄都能成功插入
    
  3. 延遲約束
    在事務中,唯一約束檢查可以延遲到提交時:

    SET CONSTRAINTS ALL DEFERRED;
    -- 需要配合支持的存儲引擎
    

7.3 唯一鍵的優化技巧

  1. 前綴索引
    對長字符串字段,可以只索引前綴:

    CREATE TABLE products(id INT PRIMARY KEY,product_code VARCHAR(100) UNIQUE
    );
    -- 改為
    CREATE UNIQUE INDEX idx_code ON products(product_code(20));
    
  2. 合并索引
    如果某個查詢經常同時用到username和email,可以創建聯合唯一索引:

    CREATE UNIQUE INDEX idx_user_email ON user(username, email);
    

8. 外鍵

8.1 表之間的羈絆

外鍵就像親子關系——孩子必須知道自己爹是誰。創建訂單表:

CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,FOREIGN KEY(user_id) REFERENCES users(id)
);

這時候插入訂單時:

-- 假設users表中沒有id=100的用戶
INSERT INTO orders(user_id) VALUES(100);
-- 報錯:Cannot add or update a child row

8.2 外鍵的連環反應

  1. 級聯更新
    當父表主鍵變更時,子表自動更新:

    CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,FOREIGN KEY(user_id) REFERENCES users(id) ON UPDATE CASCADE
    );
    
  2. 級聯刪除
    刪除父表記錄時,自動刪除子表關聯數據:

    FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
    
  3. 置空操作
    刪除父表記錄時,將子表外鍵字段設為NULL:

    FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE SET NULL
    -- 注意:字段必須允許NULL
    

8.3 外鍵的性能博弈

  1. 鎖機制
    修改父表主鍵時,會鎖定子表相關記錄,可能引發死鎖

  2. 批量導入
    導入大量數據時,建議先關閉外鍵檢查:

    SET FOREIGN_KEY_CHECKS=0;
    -- 執行導入操作
    SET FOREIGN_KEY_CHECKS=1;
    
  3. 索引優化
    外鍵字段必須有索引,否則會影響性能:

    CREATE INDEX idx_user ON orders(user_id);
    -- 如果創建外鍵時未自動創建
    

9. 綜合案例

9.1 商城系統的數據設計

讓我們來設計一個簡單的電商系統,包含三個核心表:

9.1.1 商品表(goods)
CREATE TABLE goods(goods_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID',goods_name VARCHAR(100) NOT NULL COMMENT '商品名稱',unitprice DECIMAL(10,2) NOT NULL COMMENT '單價',category VARCHAR(50) COMMENT '分類',provider VARCHAR(100) COMMENT '供應商',stock INT DEFAULT 0 COMMENT '庫存',INDEX idx_category(category)
) ENGINE=InnoDB;
9.1.2 客戶表(customer)
CREATE TABLE customer(customer_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '客戶ID',name VARCHAR(20) NOT NULL COMMENT '姓名',address VARCHAR(200) COMMENT '住址',email VARCHAR(50) UNIQUE COMMENT '郵箱',sex ENUM('男','女') COMMENT '性別',card_id CHAR(18) UNIQUE COMMENT '身份證',reg_time DATETIME DEFAULT NOW() COMMENT '注冊時間'
) ENGINE=InnoDB;
9.1.3 購買表(purchase)
CREATE TABLE purchase(order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '訂單號',customer_id INT NOT NULL COMMENT '客戶ID',goods_id INT NOT NULL COMMENT '商品ID',nums INT NOT NULL DEFAULT 1 COMMENT '購買數量',order_time DATETIME DEFAULT NOW(),FOREIGN KEY(customer_id) REFERENCES customer(customer_id),FOREIGN KEY(goods_id) REFERENCES goods(goods_id),INDEX idx_time(order_time)
) ENGINE=InnoDB;

9.2 設計亮點解析

  1. 約束組合拳

    • 客戶姓名NOT NULL保證必填
    • 郵箱和身份證UNIQUE防止重復
    • 性別用ENUM限制取值范圍
    • 購買數量DEFAULT 1避免零值
  2. 性能優化

    • 商品分類添加索引
    • 訂單時間建立索引方便按時間查詢
  3. 數據完整性

    • 外鍵約束確保訂單中的客戶和商品真實存在
    • 級聯操作可自行添加(根據業務需求)

9.3 擴展思考

  1. 庫存扣減
    在購買表插入記錄時,需要更新商品表庫存。可以通過觸發器實現:

    DELIMITER //
    CREATE TRIGGER after_purchase_insert 
    AFTER INSERT ON purchase
    FOR EACH ROW
    BEGINUPDATE goods SET stock = stock - NEW.nums WHERE goods_id = NEW.goods_id;
    END//
    DELIMITER ;
    
  2. 訂單狀態
    可以添加status字段表示訂單狀態(待支付、已發貨等),配合外鍵關聯狀態字典表

  3. 分區策略
    對于大規模數據,可以按訂單時間做分區:

    CREATE TABLE purchase(...) 
    PARTITION BY RANGE (YEAR(order_time)) (PARTITION p2022 VALUES LESS THAN (2023),PARTITION p2023 VALUES LESS THAN (2024)
    );
    

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

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

相關文章

Web3如何重塑數據隱私的未來

在這個信息爆炸的時代,數據隱私已成為我們不得不面對的嚴峻問題。Web3,作為下一代互聯網的代表,以其去中心化、用戶主權和數據安全等特點,正在重塑數據隱私的未來。它不僅僅是技術的革新,更是對個人隱私保護理念的一次…

網絡編程之TCP編程

基于 C/S &#xff1a;客戶端&#xff08;client&#xff09;/服務器端&#xff08;server&#xff09; 1.流程 2. 函數接口 所有函數所需頭文件&#xff1a; #include <sys/types.h> #include <sys/socket.h> 系統定義好了用來存儲網絡信息的結構體 ipv4通信使…

各個布局的區別以及示例

各個布局的區別以及示例 在前端開發中&#xff0c;常見的布局方式主要有以下幾種&#xff0c;每種布局都有其適用場景和特點&#xff1a; 1. 普通文檔流&#xff08;Normal Flow&#xff09; 特點&#xff1a;默認布局方式&#xff0c;元素按照HTML順序依次排列。適用場景&am…

性能優化 - 理論篇:常見指標及切入點

文章目錄 引言一、 Java 性能優化的核心思路二、為什么要度量&#xff1f;三、常用性能衡量指標詳解3.1 吞吐量與響應速度3.2 響應時間的具體度量&#xff1a;平均響應時間與百分位數3.3 并發量3.4 秒開率&#xff08;頁面秒開&#xff09;3.5 正確性&#xff08;功能可用性&am…

第2講、Odoo深度介紹:開源ERP的領先者

一、Odoo深度介紹&#xff1a;開源ERP的領先者 Odoo&#xff0c;其前身為OpenERP&#xff0c;是一款在全球范圍內廣受歡迎的開源企業管理軟件套件。它不僅僅是一個ERP系統&#xff0c;更是一個集成了客戶關系管理&#xff08;CRM&#xff09;、電子商務、網站構建、項目管理、…

Telerik生態整合:Kendo UI for Angular組件在WinForms應用中的深度嵌入(一)

Telerik DevCraft包含一個完整的產品棧來構建您下一個Web、移動和桌面應用程序。它使用HTML和每個.NET平臺的UI庫&#xff0c;加快開發速度。Telerik DevCraft提供完整的工具箱&#xff0c;用于構建現代和面向未來的業務應用程序&#xff0c;目前提供UI for ASP.NET MVC、Kendo…

2025年6月4日收獲

Authorization Authorization是一種通用的、標準化的權限控制和認證的通用框架&#xff0c;它能夠使跨系統和跨域的身份驗證和授權管理更容易&#xff0c;使不同應用程序之間能夠更輕松地實現單點登錄&#xff08;SSO&#xff09;、用戶身份驗證和授權控制等。 在前端使用 axi…

實時數據湖架構設計:從批處理到流處理的企業數據戰略升級

企業數據處理架構正在經歷一場深刻的變革。從最初的數據倉庫T1批處理模式&#xff0c;到如今的實時流處理架構&#xff0c;這一演進過程反映了業務對數據時效性要求的不斷提升。 文章目錄 第一章&#xff1a;數據湖演進歷程與現狀分析 第二章&#xff1a;實時數據湖核心架構剖…

iptables實戰案例

目錄 一、實驗拓撲 二、網絡規劃 三、實驗要求 四、環境準備 1.firewall &#xff08;1&#xff09;配置防火墻各大網卡IP并禁用 firewall和selinux &#xff08;2&#xff09;打開firewall路由轉發 2.PC1&#xff08;內網&#xff09; &#xff08;1&#xff09;配置防…

macOS 連接 Docker 運行 postgres,使用navicat添加并關聯數據庫

下載 docker注冊一個賬號&#xff0c;登錄 Docker創建 docke r文件 mkdir -p ~/.docker && touch ~/.docker/daemon.json寫入配置&#xff08;全量替換&#xff09; {"builder": {"gc": {"defaultKeepStorage": "20GB",&quo…

docker離線鏡像下載

背景介紹 在某些網絡受限的環境中&#xff0c;直接從Docker Hub或其他在線倉庫拉取鏡像可能會遇到困難。為了在這種情況下也能順利使用Docker鏡像&#xff0c;我們可以提前下載好所需的鏡像&#xff0c;并通過離線方式分發和使用。 當前鏡像有&#xff1a;python-3.8-slim.ta…

Android 3D球形水平圓形旋轉,旋轉動態更換圖片

看效果圖 1、事件監聽類 OnItemClickListener&#xff1a;3D旋轉視圖項點擊監聽器接口 public interface OnItemClickListener {/*** 當旋轉視圖中的項被點擊時調用** param view 被點擊的視圖對象* param position 被點擊項在旋轉視圖中的位置索引&#xff08;從0開始&a…

48V帶極性反接保護-差共模浪涌防護方案

在工業自動化&#xff08;電動機驅動 / 工業機器人&#xff09;、交通基礎設施&#xff08;充電樁 / 車載電子&#xff09;、安防系統&#xff08;監控攝像頭 / 門禁&#xff09;、儲能設備&#xff08;BMS / 離網控制器&#xff09;等領域&#xff0c;DC48V 電源因安全特低電壓…

CentOS在vmware局域網內搭建DHCP服務器【踩坑記錄】

1. 重新設置環境 配置dhcp服務踩了不少坑&#xff0c;這里重頭搭建記錄一下&#xff1a; 1.1 centos 網卡還原 如果之前搭了亂七八糟的環境&#xff0c;導致NAT模式也沒法上網&#xff0c;這里重新還原 我們需要在NAT模式下聯網&#xff0c;下載DHCP服務 先把centos的網卡還…

《Docker》架構

文章目錄 架構模式單機架構應用數據分離架構應用服務器集群架構讀寫分離/主從分離架構冷熱分離架構垂直分庫架構微服務架構容器編排架構什么是容器&#xff0c;docker&#xff0c;鏡像&#xff0c;k8s 架構模式 單機架構 單機架構其實就是應用服務器和單機服務器都部署在同一…

Web3時代的數據保護挑戰與應對策略

隨著互聯網技術的飛速發展&#xff0c;我們正步入Web3時代&#xff0c;這是一個以去中心化、用戶主權和數據隱私為核心的新時代。然而&#xff0c;Web3時代也帶來了前所未有的數據保護挑戰。本文將探討這些挑戰&#xff0c;并提出相應的應對策略。 數據隱私挑戰 在Web3時代&a…

從零打造算法題刷題助手:Agent搭建保姆級攻略

我用Trae 做了一個有意思的Agent 「大廠機試助手」。 點擊 https://s.trae.com.cn/a/d2a596 立即復刻&#xff0c;一起來玩吧&#xff01; Agent 簡介 Agent名稱為大廠機試助手&#xff0c;主要功能有以下三點。 解題&#xff1a; 根據用戶給出的題目給出具體的解題思路引導做…

【JavaWeb】MVC三層架構

MVC三層架構 MVC 是什么&#xff1f;三層架構的組成&#xff08;View、Controller、Model&#xff09;各層職責劃分示例說明面試高頻問題與參考答案 MVC&#xff08;Model-View-Controller&#xff09;是一種經典的軟件設計模式&#xff0c;廣泛應用于 Web 應用開發中&#xf…

嵌入式分析利器:DuckDB與SqlSugar實戰

? 一、DuckDB 的核心特性與適用場景 DuckDB 是一款 嵌入式分析型數據庫&#xff08;OLAP&#xff09; &#xff0c;專為高效查詢設計&#xff0c;主要特點包括&#xff1a; 列式存儲與向量化引擎 數據按列存儲&#xff0c;提升聚合統計效率&#xff08;如 SUM/AVG&#xf…

React---day6、7

6、組件之間進行數據傳遞 **6.1 父傳子&#xff1a;**props傳遞屬性 父組件&#xff1a; <div><ChildCpn name"蔣乙菥" age"18" height"1,88" /> </div>子組件&#xff1a; export class ChildCpn extends React.Component…