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日

相关文章

  • ASP.NET Core使用固定窗口限流

    ASP.NET Core是一个跨平台的、高效的、模块化的Web开发框架。固定窗口限流是一种常用的限流算法,用于控制并发请求的数量,防止系统被过多的请求压垮。在ASP.NET Core中使用固定窗口限流可以有效地保证系统的稳定性,提高系统的吞吐量和响应速度。 以下是使用固定窗口限流的攻略: 1. 在ASP.NET Core项目中安装Microsoft.AspN…

    C# 2023年6月3日
    00
  • ASP.NET Core使用EF查询数据

    下面是关于“ASP.NET Core使用EF查询数据”的完整攻略,分为以下几个部分: 环境配置 创建数据库 安装EF 使用EF查询数据 1. 环境配置 在使用ASP.NET Core开发前,需要进行环境配置,具体步骤如下: 安装Visual Studio 2017或更高版本 下载安装.NET Core SDK 安装ASP.NET Core模板 2. 创建数据…

    C# 2023年6月3日
    00
  • C# PropertyInfo类案例详解

    C# PropertyInfo类案例详解 简介 C# PropertyInfo类是System.Reflection命名空间下的一个类,用于描述类的属性成员。通过PropertyInfo类,可以获取类的属性的信息、值和元数据。 使用方法 获取属性信息 可以使用Type类的GetProperty()方法来获取类的属性信息,该方法接受一个字符串类型的参数,即要获…

    C# 2023年6月1日
    00
  • c# n个数排序实现代码

    C# n个数排序实现代码的完整攻略 对于C#编程语言使用初学者来说,实现n个数排序可能是一个难点,本文将带您完成此项任务。我们将使用冒泡排序和快速排序进行实现。 冒泡排序 冒泡排序是一种简单的排序算法,其主要思想是将相邻的两个元素进行比较,如果前一个元素大于后一个元素,则进行交换。该算法的时间复杂度为 $O(n^2)$。 以下是使用C#编程语言实现冒泡排序的…

    C# 2023年6月3日
    00
  • C#中怎么将一个List转换为只读的

    将一个List转换为只读的可以使用ReadOnlyCollection<T>来实现。ReadOnlyCollection<T>是IList<T>接口的一个只读实现,它只提供了读取元素的方法,不提供添加、修改或删除元素的方法,从而确保了List不可变。 下面是将一个List转换为只读的示例代码: List<int&gt…

    C# 2023年6月6日
    00
  • 基于switch你可能不知道的一些用法

    基于switch你可能不知道的一些用法 简介 switch 是 JavaScript 中流程控制语句之一,可以根据指定的表达式的值,在多个代码块中选择执行其中的一个。通常,switch 语句用于代替多个 if 语句的情况。 除了常见的使用场景外,switch 还有一些其他很有用的用法,接下来我们来学习其中几个常用的技巧。 示例一:多个条件匹配 在普通的 sw…

    C# 2023年6月3日
    00
  • ASP.NET Core – 缓存之内存缓存(下)

    话接上篇 [ASP.NET Core – 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些: 设置缓存优先级。 设置在从缓存中逐出条目后调用的 Post…

    C# 2023年4月18日
    00
  • C# Convert.ToDouble()方法: 将指定的值转换为双精度浮点数

    Convert.ToDouble() 方法是 C# 中用于将指定对象转换为双精度浮点数的方法。该方法属于 System 命名空间下的 Convert 类,可以将字符串、整数等数据类型转换为双精度浮点数。其基本语法如下: Double Convert.ToDouble(Object value); 其中,value 参数类型为 Object,表示需要转换为双精…

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