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#实现老板键功能的代码

    当我们在使用电脑的时候,有时会有别人突然进入房间或者需要临时离开,这个时候我们需要有一个快捷的方式来隐藏当前程序或窗口,以避免别人看到我们的操作内容,这就是所谓的“老板键功能”。下面我来为大家介绍如何使用C#来实现老板键功能的代码。 1. 原理 老板键功能的实现原理是通过监听操作系统的键盘事件,当监听到我们设定的快捷键时,就会触发我们的代码来执行指定的操作,…

    C# 2023年5月31日
    00
  • 12个Visual Studio调试效率技巧(小结)

    12个Visual Studio调试效率技巧(小结) Visual Studio是开发人员常用的IDE之一,它提供了丰富的功能和工具来帮助我们更快、更准确地开发和调试代码。在这篇文章中,我向大家分享了12个Visual Studio调试效率技巧,让我们在调试代码时更加高效。 技巧1:使用断点条件 有时候,我们只想在特定情况下停止代码的执行,这时我们可以使用断…

    C# 2023年6月3日
    00
  • C#实现飞行棋源码

    下面我将详细讲解“C#实现飞行棋源码”的完整攻略。 1. 确定需求 首先需要了解飞行棋游戏的规则,确定具体需求。例如,游戏玩家人数、游戏板的大小、玩家与机器的互动方式等等。 2. 构建游戏界面 可以使用Windows Forms或WPF来构建游戏界面。主要需要设计游戏棋盘,玩家信息栏,游戏控制按钮等。 3. 实现游戏逻辑 游戏逻辑是整个游戏的灵魂。游戏逻辑主…

    C# 2023年6月7日
    00
  • asp.net利用后台实现直接生成html分页的方法

    当我们开发一个网站时,通常会遇到需要进行数据分页展示的情况,而且用户体验良好的数据分页需要满足快速响应、友好的界面和数据的实时性等需求。为了解决这个问题,我们通常采用后台直接生成 HTML 分页的方式。本文将详细讲解 ASP.NET 中如何通过后台实现直接生成 HTML 分页的方法,包含以下内容: 所需控件和组件的引入 要完成后台直接生成 HTML 分页的功…

    C# 2023年6月3日
    00
  • C#强制转换和尝试转换的方法

    C#中的类型转换分为强制转换和尝试转换两种方法。 强制转换 强制转换是将一种数据类型转换为另一种数据类型,如果无法转换则会在运行时产生异常。在C#中,强制转换使用一对小括号来实现,括号中放置需要被转换的数据类型。例如: int i = 10; double d = (double)i; 在这个例子中,将一个整型变量i强制转换为double类型,结果存储在另一…

    C# 2023年5月15日
    00
  • c# 成员类型访问权限低于字段本身的实现

    “C# 成员类型访问权限低于字段本身的”实现”指的是,当定义了一个类的私有字段时,如果你使用更低访问级别的成员类型如Property或Method来访问该字段,则可以在该类之外访问到该字段。这种实现方式可以使我们更加灵活地使用类的成员,并增加代码的可读性和可维护性。 下面是具体的实现攻略: 定义私有字段 首先,在类中定义一个私有字段,使用 private 访…

    C# 2023年6月6日
    00
  • C#编程获取各种电脑硬件信息的方法示例

    C#是一种流行的面向对象编程语言,可以获取电脑硬件信息,并且是比较容易实现的。下面,我将分享一些示例代码,用以获得各种电脑硬件信息的方法。 硬件信息获取方法一:使用System.Management命名空间 System.Management命名空间提供了一种获取WMI(Windows Management Instrumentation)服务的方法,该服务…

    C# 2023年6月7日
    00
  • c#判断操作系统位数的示例分享

    感谢您对c#判断操作系统位数的感兴趣,下面是一个详细的攻略: 1. 背景知识 在编写程序时,我们需要知道操作系统的位数以确定程序的编译选项。64位操作系统的效率和安全性高于32位操作系统,因此我们需要通过代码来判断操作系统是32位还是64位。 2. 简单方法 使用Environment.Is64BitOperatingSystem方法可以判断操作系统是否为6…

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