用合适的类型以及保护数据的 NOT NULL、UNIQUE 和 PRIMARY KEY 约束,设计你自己的表。
在 Kodokon 中打开本课到目前为止,你查询的都是现成的表;而专业开发者是自己设计它们的。一个好的模式会在插入时就拒绝无效数据:它是你的第一道防线,先于任何应用代码。请在 sqliteonline.com 或 sqlite3 中创建这张表:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
username TEXT NOT NULL UNIQUE,
created_at TEXT NOT NULL
DEFAULT (datetime('now'))
);SQLite 只认识五种存储类型:INTEGER、REAL、TEXT、BLOB 和 NULL。日期在其中以 ISO 格式的 TEXT 存储(2026-07-04)。在别处(PostgreSQL、MySQL),你则会声明 VARCHAR(255)、TIMESTAMP 或 BOOLEAN:原理不变,只是类型名称有所不同。现在来测试你的约束:
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice');
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice2');主键用于标识每一行:绝不为 NULL,绝不重复,每张表只有一个。在 SQLite 中,INTEGER PRIMARY KEY 有一个宝贵的特性:当你省略它的值时,该列会自动递增,就像上面那些插入语句那样。在 PostgreSQL 上你会写 GENERATED ALWAYS AS IDENTITY,在 MySQL 上写 AUTO_INCREMENT。最后,用 CHECK 添加一条业务规则:
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
sku TEXT NOT NULL UNIQUE,
price REAL NOT NULL CHECK (price >= 0)
);
INSERT INTO products (name, sku, price)
VALUES ('Keyboard', 'KB-01', -5);