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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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服务,旨在提高纱线工厂的数字化和智能化水平。我在该项目中担任系统架构设计师一职,负责该项目的架构设计工作。本文结合我…