SQLite - 约束:数据完整性的指南

你好,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索SQLite约束的世界。如果你是编程新手,不用担心——我会成为你的友好向导,一步一步地解释所有内容。在本教程结束时,你将能够像专业人士一样约束你的数据!

SQLite - Constraints

约束是什么?

在我们深入之前,让我们先谈谈约束是什么。想象你正在搭一座纸牌屋。你希望它稳固,对吧?数据库中的约束就像你遵循的规则,以防止你的纸牌屋倒塌。它们确保你的数据保持一致和可靠。

约束类型

SQLite提供了几种类型的约束。让我们通过一些有趣的例子来探索每一种!

1. NOT NULL约束

NOT NULL约束就像俱乐部的保镖——它不允许空值进入你的数据库。

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

在这个例子中,我们正在创建一个学生表。nameage字段不能留空。如果你尝试插入一个没有名字或年龄的学生,SQLite会礼貌地(但坚决地)拒绝。

2. DEFAULT约束

DEFAULT约束就像你妈妈给你打包午餐——如果你忘记带某样东西,它会提供一个默认选项来覆盖。

CREATE TABLE orders (
id INTEGER PRIMARY KEY,
product TEXT NOT NULL,
quantity INTEGER DEFAULT 1,
order_date TEXT DEFAULT CURRENT_DATE
);

在这里,如果你在下单时没有指定数量,它会假设你想要一个物品。如果你忘记添加日期,它会使用今天的日期。

3. UNIQUE约束

UNIQUE约束就像在教室里分配座位号——没有两个学生可以坐在同一个座位上。

CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
email TEXT UNIQUE
);

这确保了没有两个用户可以有相同的用户名或电子邮件地址。这对于防止重复账户非常完美!

4. PRIMARY KEY约束

PRIMARY KEY约束就像给每个学生发放唯一的ID卡。它是一种特殊的UNIQUE约束,而且不能为NULL。

CREATE TABLE books (
isbn TEXT PRIMARY KEY,
title TEXT NOT NULL,
author TEXT NOT NULL
);

在这个例子中,每本书都有一个唯一的ISBN作为其标识符。

5. CHECK约束

CHECK约束就像老师检查你的作业——它确保你的数据满足某些条件。

CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER CHECK(age >= 18),
salary REAL CHECK(salary > 0)
);

这确保了所有员工至少18岁,并且有正的薪水。这里没有童工或无薪实习!

6. FOREIGN KEY约束

FOREIGN KEY约束就像连接拼图块——它根据相关数据将表连接在一起。

CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER,
product TEXT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);

这个约束确保orders表中的每个customer_idcustomers表中的某个id相匹配。

修改约束

有时,你可能需要更改你的约束。让我们看看如何操作。

添加约束

你可以使用ALTER TABLE命令向现有表添加约束:

ALTER TABLE students ADD CONSTRAINT age_check CHECK(age > 0);

这添加了一个检查,以确保所有年龄都是正数。

删除约束

在SQLite中删除约束有点棘手。你实际上需要重新创建没有约束的表:

-- 步骤1:创建一个没有约束的新表
CREATE TABLE new_students AS SELECT * FROM students;

-- 步骤2:删除旧表
DROP TABLE students;

-- 步骤3:重命名新表
ALTER TABLE new_students RENAME TO students;

约束方法

下面是一个总结我们可以使用的约束方法的便捷表格:

方法 描述
NOT NULL 确保列不能有NULL值
DEFAULT 为列提供一个默认值
UNIQUE 确保列中的所有值都是不同的
PRIMARY KEY 在数据库表中唯一标识每一行/记录
CHECK 确保列中的所有值满足某些条件
FOREIGN KEY 在另一表中唯一标识一行/记录

结论

恭喜你!你刚刚完成了SQLite约束的速成课程。记住,约束是你的朋友——它们帮助你保持数据的清洁、一致和可靠。在你继续探索数据库世界的旅程中,你会发现这些约束在维护数据完整性方面非常有价值。

始终考虑你的数据应该遵循哪些规则,并使用约束来执行这些规则。预防不良数据进入数据库比之后清理它们要容易得多!

继续练习,保持好奇心,快乐编码!??

Credits: Image by storyset