📜  sqlite 外键 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:19.962000             🧑  作者: Mango

SQLite 外键 - SQL

简介

SQLite 是一款轻量级的关系型数据库管理系统,支持大部分的 SQL 语言特性。外键约束是一种保证数据完整性和关联性的重要机制,它可以帮助我们在查询和操作数据时保持数据的完整性和一致性。

外键约束的主要目的是通过限制或约束数据的完整性来确保数据始终保持一致状态。在 SQLite 中,我们可以使用外键约束来实现一些常见的数据库功能,例如防止重复数据、保证数据关联性、更新或删除相关联的数据等。

使用

在 SQLite 中,我们可以使用 FOREIGN KEY 关键字来创建外键约束。以下是创建一个外键的示例:

CREATE TABLE Order (
  OrderId INTEGER PRIMARY KEY,
  CustomerId INTEGER,
  OrderDate TEXT,
  FOREIGN KEY (CustomerId) REFERENCES Customer(CustomerId)
);

在上面的示例中,我们定义了一个 Order 表,其中包含 OrderId、CustomerId 和 OrderDate 字段。CustomerId 字段作为外键,它定义了一个对 Customer 表中的 CustomerId 字段的引用,来确保 Order 表中的每个订单都归属于一个客户。

当我们向 Order 表中插入数据时,如果插入的 CustomerId 不存在于 Customer 表中,就会触发外键约束,导致插入操作失败。同样,如果我们尝试删除 Customer 表中某个 CustomerId 的记录,而该记录在 Order 表中仍有相关联的订单,也会触发外键约束,导致删除操作失败。

我们还可以使用 ON DELETE 和 ON UPDATE 子句来指定在删除或更新关联数据时应如何处理外键约束。以下是一些常见的选项:

  • SET NULL:删除或更新关联数据时,将外键字段设置为 NULL。
  • CASCADE:删除或更新关联数据时,同步删除或更新外键字段相关联的数据。
  • RESTRICT:防止删除或更新关联数据,除非外键字段的相关数据已经删除或更新。
示例

以下是一个示例,展示如何创建一个包含外键约束的 SQLite 数据库:

PRAGMA foreign_keys = ON;

CREATE TABLE Customer (
  CustomerId INTEGER PRIMARY KEY,
  FirstName TEXT,
  LastName TEXT,
  Email TEXT UNIQUE
);

CREATE TABLE Order (
  OrderId INTEGER PRIMARY KEY,
  CustomerId INTEGER,
  OrderDate TEXT,
  FOREIGN KEY (CustomerId) REFERENCES Customer(CustomerId) ON DELETE CASCADE
);

在上面的示例中,我们首先使用 PRAGMA 指定了外键约束的开启状态。接着,我们创建了一个 Customer 表和一个 Order 表,并在 Order 表中声明了一个对 Customer 表中的 CustomerId 字段的引用。我们还使用了 ON DELETE CASCADE 子句,指定当我们删除 Customer 表中某个 CustomerId 的记录时,相关联的 Order 表中的订单也应该被删除。

结论

外键约束是一种保证数据完整性和关联性的重要机制,能够帮助我们避免数据不一致和冲突。在 SQLite 中,我们可以使用 FOREIGN KEY 关键字来创建外键约束,并使用 ON DELETE 和 ON UPDATE 子句来指定外键操作的行为。当我们使用外键约束时,应该先确保数据库支持外键,并使用合适的约束类型来保证数据的完整性。