SQLite 入门教程三 好多约束 Constraints

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#基于HttpWebRequest实现发送HTTP请求的方法分析

    下面我就来为您详细讲解一下“C#基于HttpWebRequest实现发送HTTP请求的方法分析”的完整攻略。 1. HttpWebRequest简介 HttpWebRequest类是.NET Framework中Web请求的基本类之一。它用于向URI发送HTTP请求和接收响应。在与Web服务通信时,它是一个强大且灵活的工具,可以发送HTTP GET、POST…

    C# 2023年5月31日
    00
  • C#查找对象在ArrayList中出现位置的方法

    Markdown格式说明: 标题使用#号进行标记 代码块使用“`标记开头和结尾 示例说明使用文本加代码块结合的方式 C#查找对象在ArrayList中出现位置的方法 在 C# 中,可以使用 ArrayList 类型来存储一些对象。有时候我们需要查找某个对象在 ArrayList 中出现的位置,这时候可以使用以下方法对 ArrayList 进行搜索: int…

    C# 2023年5月31日
    00
  • C# StackExchange.Redis 用法汇总

    C# StackExchange.Redis 用法汇总 简介 StackExchange.Redis是一种快速、零分配的. NET Redis客户端。 它支持广泛的Redis部署场景,从单机到主从到Redis集群等等。 除了基本Redis功能外,它还提供了批量操作,管道,事务,Lua脚本执行,Pub / Sub,内置的分区支持等功能。 安装 首先安装Stac…

    C# 2023年5月31日
    00
  • unity实现录音并保存本地

    下面我就来详细讲解如何在Unity中实现录音并保存本地。 1. 前置准备 在开始实现录音之前,我们需要导入一个Unity的插件——Microphone,这个插件可以让我们在Unity中调用系统的音频采集设备。具体的导入方法如下: 打开Unity,进入项目。 点击菜单栏的“Window”,在下拉菜单中点击“Package Manager”。 在Package …

    C# 2023年6月3日
    00
  • ASP.NET常用代码

    下面我会详细讲解 ASP.NET 常用代码的攻略,包含两条示例。 1. 常用的 ASP.NET 代码 1.1 控件操作 在 ASP.NET 中,我们可以通过控件来操作网页中的元素,如文本框、按钮等等。以下是一些常见的控件操作代码: 在代码中获取控件: TextBox txtBox = (TextBox)FindControl("txtName&qu…

    C# 2023年5月15日
    00
  • c#使用windows服务更新站点地图的详细示例

    下面是“c#使用windows服务更新站点地图的详细示例”的完整攻略,本文将由以下几部分组成:需求分析、技术选型、开发流程和实现示例。 需求分析 我们需求是实现一个使用 Windows 服务来自动更新网站地图(SiteMap)的功能。这个服务需要能够自动遍历网站,根据业务逻辑生成站点地图,并更新网站。在此基础上,我们可以选择以特定的时间间隔来调度这个服务。 …

    C# 2023年5月31日
    00
  • C# 获取进程退出代码的实现示例

    C# 获取进程退出代码的实现示例包括以下步骤: 获取进程对象 可以使用Process类来获取指定进程的对象,代码如下: Process process = Process.GetProcessById(processId); 其中,processId为进程的ID号。如果希望通过进程的名称来获取进程对象,可以使用以下代码: Process process = …

    C# 2023年5月31日
    00
  • C#分布式事务的超时处理实例分析

    C#分布式事务的超时处理实例分析 简介 本文将介绍在C#中处理分布式事务超时的实例,重点是针对传统的数据库操作,如何处理分布式事务超时的问题。 超时处理 在分布式事务中,一个事务可能会跨越多个数据库。当一个分布式事务出现了超时异常,我们需要对其进行处理。 超时处理有两个主要的目的: 避免事务无限制地等待,耗尽所有的资源 报告错误并撤销操作 下面介绍两个示例,…

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