SQLite3 中列(變量)的特殊屬性

在 SQLite3 中,列的特殊屬性通常通過約束(Constraints)和數據類型修飾符來定義。這些屬性可以在創建表時指定,用于限制數據的完整性或定義特殊行為。以下是 SQLite3 支持的主要特殊屬性及其說明:

1. 主鍵約束(PRIMARY KEY)

  • 功能:確保列中的值唯一且不為 NULL,通常用于標識表中的每一行。
  • 示例
    CREATE TABLE users (id INTEGER PRIMARY KEY,  -- 自增主鍵(見 AUTOINCREMENT)name TEXT NOT NULL
    );
    
  • 特性
    • 若未顯式指定值,SQLite 會自動分配一個唯一的整數(ROWID)。
    • 一個表只能有一個主鍵,但主鍵可以由多個列組成(復合主鍵)。

2. 自增屬性(AUTOINCREMENT)

  • 功能:僅用于 INTEGER PRIMARY KEY,確保值嚴格遞增且不會被重用(即使行被刪除)。
  • 示例
    CREATE TABLE logs (id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自增且不重用值message TEXT
    );
    
  • 注意
    • 不使用 AUTOINCREMENT 時,SQLite 可能會重用已刪除的 ID 值(性能更佳)。
    • AUTOINCREMENT 會增加額外開銷,僅在需要嚴格遞增時使用。

3. 唯一約束(UNIQUE)

  • 功能:確保列中的所有值都是唯一的,但允許有一個 NULL 值。
  • 示例
    CREATE TABLE emails (user_id INTEGER PRIMARY KEY,email TEXT UNIQUE  -- 每個郵箱必須唯一
    );
    

4. 非空約束(NOT NULL)

  • 功能:禁止列中插入 NULL 值。
  • 示例
    CREATE TABLE products (id INTEGER PRIMARY KEY,name TEXT NOT NULL,  -- 名稱不能為空price REAL
    );
    

5. 默認值(DEFAULT)

  • 功能:當插入時未提供值,則使用預設的默認值。
  • 示例
    CREATE TABLE tasks (id INTEGER PRIMARY KEY,status TEXT DEFAULT 'pending',  -- 默認狀態為 "pending"created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 默認時間為當前時間
    );
    

6. CHECK 約束

  • 功能:自定義條件,確保插入或更新的值滿足特定表達式。
  • 示例
    CREATE TABLE employees (id INTEGER PRIMARY KEY,salary REAL CHECK (salary > 0),  -- 工資必須為正數age INTEGER CHECK (age >= 18)    -- 年齡必須 >= 18
    );
    

7. 外鍵約束(FOREIGN KEY)

  • 功能:建立表間關聯,確保引用的值存在于關聯表中。
  • 示例
    CREATE TABLE orders (order_id INTEGER PRIMARY KEY,user_id INTEGER,FOREIGN KEY (user_id) REFERENCES users(id)  -- user_id 必須存在于 users 表的 id 列中
    );
    
  • 特性
    • 需要通過 PRAGMA foreign_keys = ON; 啟用外鍵約束。
    • 可配合 ON DELETEON UPDATE 子句定義級聯操作(如 CASCADESET NULL)。

8. 索引(INDEX)

  • 功能:加速查詢,但不屬于嚴格的約束。
  • 示例
    CREATE INDEX idx_emails ON emails(email);  -- 為 email 列創建索引
    

9. 沖突處理

  • 功能:當違反約束時的默認行為,可通過 ON CONFLICT 子句指定。
  • 選項
    • ROLLBACK:回滾事務。
    • ABORT:中止當前操作(默認)。
    • REPLACE:替換已有記錄。
    • IGNORE:忽略沖突。
  • 示例
    INSERT OR REPLACE INTO emails (user_id, email) VALUES (1, 'new@example.com');
    

10. 自動時間戳

  • 功能:利用 DEFAULT CURRENT_TIMESTAMP 自動記錄時間。
  • 示例
    CREATE TABLE sessions (id INTEGER PRIMARY KEY,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  -- 更新時自動刷新
    );
    

總結

屬性作用
PRIMARY KEY確保唯一性和非空性,通常作為行標識符。
AUTOINCREMENT強制整數主鍵嚴格遞增且不重用值。
UNIQUE確保列值唯一(允許一個 NULL)。
NOT NULL禁止插入 NULL 值。
DEFAULT value未提供值時使用默認值。
CHECK (expr)自定義約束條件。
FOREIGN KEY建立表間引用關系。
INDEX加速查詢(非約束)。
ON CONFLICT定義約束沖突時的處理策略。

使用建議

  • 主鍵選擇:優先使用 INTEGER PRIMARY KEY,性能最佳。僅在必要時添加 AUTOINCREMENT
  • 外鍵約束:啟用外鍵約束(PRAGMA foreign_keys = ON)以維護數據完整性。
  • CHECK 約束:用于業務規則(如年齡范圍、金額限制),但避免復雜表達式以保持性能。

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

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

相關文章

Datawhale AI 夏令營:用戶洞察挑戰賽 Notebook(2)

針對文本聚類優化 優化TF-IDF特征工程# 調整ngram_range:設置為(1, 2),捕捉單字和雙字詞(如“不錯”“不滿意”)。 # 限制特征數量:通過max_features5000保留高信息密度特征,降低維度。 # 過濾低頻/高頻詞&…

【博主親測可用】PS2025最新版:Adobe Photoshop 2025 v26.8.1 激活版(附安裝教程)

軟件簡介 Adobe Photoshop 2025是Adobe公司開發的一款圖像處理軟件。作為行業標準的數字圖像編輯工具,其核心定位是創意設計、后期攝影、3D建模和AI驅動創作,適用于專業設計師、攝影師、插畫家和多媒體創作者。界面設計簡單直觀,易于操作&…

unity A星尋路

算法 fCost gCost hCost gCost 是當前節點到移動起始點的消耗,hCost是當前節點到終點的消耗 網格為變成為1的矩形,左右相鄰的兩個網格直接的gCost為1,斜對角相鄰的兩個網格的gCost為1.4 hCost 當前網格到終點網格的 水平距離 垂直距離 比如…

十一 Javascript的按值傳遞

你將知道:“傳遞” 值是什么意思什么是按值傳遞傳遞物品JavaScript 中沒有傳遞引用!介紹當需要在 JavaScript 中分配或簡單地將一個值傳遞給其他標識符時,我們就會看到通常所說的 按值傳遞 。嚴格來說,JavaScript 中傳遞值的方式只…

SpringBoot ThreadLocal 全局動態變量設置

需求說明: 現有一個游戲后臺管理系統,該系統可管理多個大區的數據,但是需要使用大區id實現數據隔離,并且提供了大區選擇功能,先擇大區后展示對應的數據。需要實現一下幾點: 1.前端請求時,area_i…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘logging’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘logging’問題 摘要: 在使用 PyCharm 2025 控制臺通過 pip install 安裝第三方庫時,常會遇到諸如 ModuleNotFoundError: No module name…

打破技術債困境:從“保持現狀”到成為變革的推動者

相信許多在科技行業的同行都面臨過類似的挑戰:明知系統存在“技術債”,卻因為溝通成本、團隊壓力和短期KPI等原因,難以推動改進,最終陷入“想做卻不敢做”的矛盾心態。這不僅影響個人心情,更重要的是,它像一…

Spring Boot 整合 RabbitMQ

Spring Boot 整合 RabbitMQ 一、概述:RabbitMQ 是什么? 你可以把 RabbitMQ 想象成一個「快遞中轉站」。 比如你在網上買了一本書,賣家(生產者)把包裹(消息)交給快遞站(RabbitMQ&…

Unity Demo-3DFarm詳解-其一

我們來拆解一個種田游戲,這個游戲種類內部的功能還是比較模板化的,我們來一點點說。我們大體上分為這么幾個部分:農場運營玩法角色與玩家互動物品與背包存檔和進度管理用戶界面系統農場運營可以大體上分為:種植系統:支…

esp8266驅動下載

問題描述:esp8266插上電腦,設備管理器無法識別,顯示為USB serial(黃色感嘆號) 首先確認你的esp8266是不是 CH340 系列的 USB 轉串口芯片 CH340驅動下載地址

大語言模型的極限:知識、推理與創造力的邊界探析

大語言模型的極限:知識、推理與創造力的邊界探析 人工智能領域的快速發展推動了大語言模型(LLM)的廣泛應用,這些模型在文本生成、知識問答和創意表達等方面展現出前所未有的能力。然而,隨著應用場景的深化,…

git中的fork指令解釋

在Git中,Fork 是指將他人的代碼倉庫(Repository)復制到自己的賬戶下,創建一個完全獨立的副本[1][2]。以下是關于Fork的詳細說明: Fork的定義與核心作用 定義:Fork是代碼托管平臺(如GitHub&#…

iPhone 抓包工具有哪些?多工具對比分析優缺點

iOS 平臺一向以安全性著稱,這也使得對其進行網絡調試和抓包變得異常困難。相比安卓,iPhone 抓包難點主要在以下幾點: 系統限制代理設置的靈活性無法自由安裝根證書抓包常涉及 HTTPS 解密與雙向認證破解普通用戶設備無 root 或越獄權限 因此&a…

使用 libcu++ 庫

文章目錄使用 libcu 庫安裝與設置基本組件1. 原子操作2. 內存管理3. 類型特性4. 同步原語編譯選項注意事項使用 libcu 庫 libcu 是 NVIDIA 提供的 CUDA C 標準庫實現,它為 CUDA 開發者提供了類似 C 標準庫的功能和接口。以下是使用 libcu 的基本指南: …

[Leetcode] 預處理 | 多叉樹bfs | 格雷編碼 | static_cast | 矩陣對角線

魔術排列模擬一個特定的洗牌過程,并找到使得經過一系列洗牌和取牌操作后,能夠與給定的目標數組target相匹配的最小k值核心思想: 預處理初始排列:從一個按順序排列的數組(例如,{1, 2, 3, ..., n})開始。洗牌…

【技術追蹤】SynPo:基于高質量負提示提升無訓練少樣本醫學圖像分割性能(MICCAI-2025)

SAM 新用法,無需訓練,利用高質量負提示提升分割性能~ 論文:SynPo: Boosting Training-Free Few-Shot Medical Segmentation via High-Quality Negative Prompts 代碼:https://liu-yufei.github.io/synpo-project-page/ 0、摘要 大…

深入理解機器學習

一.前言本章節開始來講解一下機器學習的知識,本期作為一個了解就大概介紹一下,我們不會從機器學習基礎開始介紹,但是后面會來補充,隨著ai的不斷發展,機器學習在ai的領域里面的占比越來約少,我們還是以應用為…

數據結構 順序表(1)

目錄 1.線性表 2.順序表 1.線性表 線性表(linear list)是n個具有相同特性的數據元素的有限序列。線性表是一種在實際中廣泛使用 的數據結構,常見的線性表:順序表、鏈表、棧、隊列、字符串… 線性表在邏輯上是線性結構&#…

openssl 生成國密證書

openssl生成證書生成CA私鑰 openssl ecparam -genkey -name SM2 -out ca.key.pem -noout證書請求 openssl req -new -key ca.key.pem -out ca.cert.req -subj “/CNrtems-strongswan-CA”生成證書 openssl x509 -req -days 3650 -in ca.cert.req -signkey ca.key.pem -out ca.c…

系統架構設計師論文分享-論分布式事務技術及其應用

我的軟考歷程 摘要 2023年9月,我所在的公司通過了研發紗線MES系統的立項,該系統為國內紗線工廠提供SAAS服務,旨在提高紗線工廠的數字化和智能化水平。我在該項目中擔任系統架構設計師一職,負責該項目的架構設計工作。本文結合我…