SQLite 入门教程三 好多约束 Constraints

yizhihongxing

SQLite 入门教程三 好多约束 Constraints

在SQLite中,可以使用约束(Constraints)来保证表中数据的完整性和一致性。本教程将详细介绍SQLite数据库中支持的主要约束类型。

1. NOT NULL

使用NOT NULL约束可以保证指定的列必须有值,而不能为NULL(即空值)。以下是一个实例:

CREATE TABLE Students (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER NOT NULL
);

上述示例中,表Students中的nameage列都使用了NOT NULL约束,这意味着在插入数据时必须为这两个列赋值(不能为NULL)。

2. UNIQUE

使用UNIQUE约束可以保证指定的列中的每个值都是唯一的,即不能重复。以下是一个实例:

CREATE TABLE Users (
    id INTEGER PRIMARY KEY,
    username TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL
);

上述示例中,表Users中的username列使用了UNIQUE约束,这将保证每行数据中的username列都是唯一的。

3. PRIMARY KEY

使用PRIMARY KEY约束可以将指定的列设置为主键列,主键列的值必须是唯一的。通常情况下,使用INTEGER类型的列作为主键,且设定为自增长。以下是一个实例:

CREATE TABLE Members (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    gender TEXT NOT NULL
);

上述示例中,表Members中的id列设定为主键列,并且使用AUTOINCREMENT选项将其设定为自增长(即每插入一条记录,id列的值都会自动增加)。这将保证每行数据中的id列都是唯一的。

4. CHECK

使用CHECK约束可以在插入或更新数据时,对指定的列加以限制,要求其在某些特定的条件下才能插入或更新。以下是一个实例:

CREATE TABLE Books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    price REAL NOT NULL CHECK(price > 0)
);

上述示例中,表Books中的price列使用了CHECK约束,这将保证price列的值必须大于0。如果尝试插入price小于或等于0的行,则会出现“插入异常”(insertion anomaly)。

5. FOREIGN KEY

使用FOREIGN KEY约束可以将一张表中的列与另一张表中的列进行关联,从而保证数据的完整性和一致性。以下是一个实例:

CREATE TABLE Orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    product_id INTEGER NOT NULL,
    quantity INTEGER NOT NULL,
    FOREIGN KEY(customer_id) REFERENCES Customers(id),
    FOREIGN KEY(product_id) REFERENCES Products(id)
);

上述示例中,表Orders中的customer_idproduct_id列均使用了FOREIGN KEY约束,这将保证customer_idproduct_id列中的值必须是关联表CustomersProducts中的某个id值。如果当前表中插入了一个非法值,则会出现“插入异常”(insertion anomaly)。

示例1: 使用 UNQIUE 保证唯一性

假如我们现在需要创建一张账单表,里面有账单ID、账单的编号、和账单的总金额,其中账单编号需要保证唯一性。可以通过在表的创建语句中使用 UNIQUE 约束来实现。

CREATE TABLE bills (
    id INTEGER PRIMARY KEY,
    bill_num TEXT UNIQUE,
    amount REAL NOT NULL
);

上述示例中,表bills中的bill_num列使用了UNIQUE约束,这将保证bill_num列中的值必须是唯一的。如果尝试插入一个bill_num值已存在的行,则会出现“插入异常”(insertion anomaly)。

示例2:使用 CHECK 检查数据的范围

我们想在表中创建一个单笔转账记录,里面有源账户名称、源账户余额、目标账户名称、目标账户余额、转账金额等。现在需要限制转账金额必须在源账户的余额范围之内,同时目标账户的余额也要发生改变。可以通过在表的创建语句中使用 CHECK 约束来实现。

CREATE TABLE transfers (
    id INTEGER PRIMARY KEY,
    source_name TEXT NOT NULL,
    source_balance REAL NOT NULL,
    target_name TEXT NOT NULL,
    target_balance REAL NOT NULL,
    amount REAL NOT NULL CHECK(amount > 0 AND amount <= source_balance),
    FOREIGN KEY(source_name) REFERENCES accounts(name),
    FOREIGN KEY(target_name) REFERENCES accounts(name)
);

上述示例中,表transfers中的amount列使用了CHECK约束,这将保证amount列中的值必须大于0并且小于等于source_balance列中的值。如果尝试插入一个amount值不在合法范围内的行,则会出现“插入异常”(insertion anomaly)。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQLite 入门教程三 好多约束 Constraints - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • c# 日历控件的实现

    C#日历控件的实现 在C#中,开发者可以使用日历控件来方便地选择日期。下面分享一下如何在C#中实现日历控件。 步骤一:引用命名空间 首先,在你的C#程序中引用 System.Windows.Forms 命名空间。 using System.Windows.Forms; 步骤二:创建日历控件 在你的C#程序中,实例化一个 MonthCalendar 控件。 M…

    C# 2023年6月1日
    00
  • C#实现计算器功能(winform版)

    C#实现计算器功能(winform版)攻略 1. 创建WinForm程序 首先需要打开Visual Studio,创建一个新的WinForm项目。创建的时候需要给项目起个名字,比如”Calculator”。 2. 布局UI界面 布局UI界面需要使用到Visual Studio提供的设计器,拖动按钮、文本框等控件到界面上即可。 假设我们需要实现的计算器界面是一…

    C# 2023年6月7日
    00
  • C#中析构函数、Dispose、Close方法的区别

    本文将详细讲解”C#中析构函数、Dispose、Close方法的区别”,让您对它们有更清晰的认识。 析构函数 首先,我想说的是析构函数。析构函数在对象销毁之前调用,用于释放该对象占用的资源。在C#中,析构函数是通过在类名前加上”~”符号来定义的。例如: public class MyClass { ~MyClass() { // 释放资源的代码 } } 在.…

    C# 2023年6月8日
    00
  • C#文件目录操作方法汇总

    C#文件目录操作方法汇总 在C#编程中,文件和目录操作是非常常见的需求。本文总结了常用的C#文件目录操作方法,包括路径操作、目录创建、文件创建、文件读写、文件复制、文件删除等多个方面,旨在帮助读者快速实现对文件和目录的操作。 路径操作 获取当前应用程序执行文件所在目录 string path = AppDomain.CurrentDomain.BaseDir…

    C# 2023年6月7日
    00
  • 浅谈对c# 面向对象的理解

    浅谈对C#面向对象的理解 C# 面向对象编程的基本概念 C# 是一种面向对象的编程语言,对象是构成类的基本单元,一个类包含属性、方法和事件。在面向对象编程中,将程序中的所有事物都看作对象,这些对象之间可以互相传递消息,完成整个程序的任务。一般来说,面向对象编程强调以下概念: 类(Class):类是面向对象程序的基本单元,类定义了一组数据和行为,用于描述某个实…

    C# 2023年6月1日
    00
  • C# 模式匹配完全指南

    C# 模式匹配完全指南 什么是 C# 模式匹配? C# 7.0 开始加入了一种新的特性,那就是模式匹配(Pattern Matching)。模式匹配的主要作用是用来匹配各种数据类型,从而简化我们的程序设计,并且让代码更加简洁易懂。 C# 模式匹配的类型 常量模式(Constant Patterns) 次类型模式(Type Patterns) 变量模式(Var…

    C# 2023年5月15日
    00
  • asp.net 文件下载的通用方法

    ASP.NET 是一个强大的 Web 应用程序框架,可用于创建各种类型的 Web 应用程序。如果你需要在应用程序中实现文件下载功能,下面是一套通用的方法,能够帮助你轻松达成目标。 使用 Response.TransmitFile 方法实现文件下载 第一种实现文件下载的方法是使用 Response.TransmitFile 方法。这种方法的优点是非常简单易用,…

    C# 2023年6月3日
    00
  • 详解c# AutoMapper 使用方式

    详解c# AutoMapper 使用方式 什么是AutoMapper? AutoMapper是一个C#库,用于对象之间的映射(mapping)。当我们需要将一个对象(Source)的属性值映射到另一个对象(Target)时,AutoMapper可以帮助我们快速而简便地完成这项工作,而无需手动写出大量的赋值表达式。 安装AutoMapper 可以通过NuGet…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部