SQLite - 约束:数据完整性的指南
你好,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索SQLite约束的世界。如果你是编程新手,不用担心——我会成为你的友好向导,一步一步地解释所有内容。在本教程结束时,你将能够像专业人士一样约束你的数据!
约束是什么?
在我们深入之前,让我们先谈谈约束是什么。想象你正在搭一座纸牌屋。你希望它稳固,对吧?数据库中的约束就像你遵循的规则,以防止你的纸牌屋倒塌。它们确保你的数据保持一致和可靠。
约束类型
SQLite提供了几种类型的约束。让我们通过一些有趣的例子来探索每一种!
1. NOT NULL约束
NOT NULL约束就像俱乐部的保镖——它不允许空值进入你的数据库。
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
在这个例子中,我们正在创建一个学生表。name
和age
字段不能留空。如果你尝试插入一个没有名字或年龄的学生,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_id
与customers
表中的某个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