主键、外键与约束
按照面试官希望听到的方式,解释键、唯一性和引用完整性
主键、外键与约束 是 CoddyKit 上的免费 SQL Interview Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Interview Prep 课程共包含 4 节课。
为什么每次都会谈到键
介绍完 SQL 后,面试官通常会转向键和约束。贯穿这些概念的主题是完整性:数据库强制执行这些规则,从而防止错误数据进入数据库。
什么是主键
主键可以唯一标识每一行。它始终是唯一的且NOT NULL,并且一张表最多只能有一个主键。请清晰地说出这些要点,这会为您赢得分数。
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
email VARCHAR(255) NOT NULL,
name VARCHAR(100)
);自然键与代理键
使用真实数据,还是使用生成的数字?自然键使用已有的唯一数据;代理键则是生成的标识符。大多数团队更偏好代理键,因为它们稳定。
复合主键
主键可以跨越多个列,这就是复合键。您会在连接表中看到这种设计,其中两个外键共同标识每一行。
CREATE TABLE enrollments (
student_id INTEGER,
course_id INTEGER,
enrolled_on DATE,
PRIMARY KEY (student_id, course_id)
);主键与唯一约束
这是一个几乎必问的问题:主键与唯一约束有什么区别?二者都会保证唯一性,但一张表只有一个主键(NOT NULL),却可以有多个唯一约束(每个都允许一个 NULL)。
CREATE TABLE users (
id INTEGER PRIMARY KEY,
email VARCHAR(255) UNIQUE,
username VARCHAR(50) UNIQUE
);什么是外键
外键引用另一张表的主键,从而保证引用完整性:您不能添加一个指向不存在父行的子行。
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER REFERENCES customers(id),
amount NUMERIC(10,2)
);引用操作:ON DELETE / ON UPDATE
“如果客户被删除,订单会发生什么?”这涉及引用操作:RESTRICT 会阻止删除(这是默认行为),CASCADE 会删除子行,SET NULL 会清空该键。
CREATE TABLE order_items (
id INTEGER PRIMARY KEY,
order_id INTEGER REFERENCES orders(id) ON DELETE CASCADE
);NOT NULL、CHECK 和 DEFAULT
另外三个约束共同完善了完整性:NOT NULL 禁止缺失值,CHECK 强制执行类似 stock >= 0 的规则,而 DEFAULT 提供备用值。
CREATE TABLE products (
id INTEGER PRIMARY KEY,
price NUMERIC(10,2) NOT NULL DEFAULT 0,
stock INTEGER CHECK (stock >= 0)
);示例:用完整性设计表
让我们设计一个图书馆的借阅表。下面的代码使用两个外键、一个不可为空的到期日期,以及一条唯一规则,确保同一本书不会同时被借出两次。
CREATE TABLE loans (
id INTEGER PRIMARY KEY,
book_id INTEGER NOT NULL REFERENCES books(id),
member_id INTEGER NOT NULL REFERENCES members(id),
due_date DATE NOT NULL,
returned BOOLEAN DEFAULT false
);如何谈论完整性
请说出三种完整性,以体现您的理解深度:由主键保证的实体完整性,由外键保证的引用完整性,以及由 NOT NULL、CHECK 和数据类型保证的域完整性。
向现有表添加约束
如果面试官要求您向现有表添加约束,请使用 ALTER TABLE ... ADD CONSTRAINT。还有一个值得提及的细节:如果现有行已经违反了新规则,操作可能会失败。
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id) REFERENCES customers(id);快速检查
请区分主键与唯一约束。
回顾
回顾:主键具有唯一性且为 NOT NULL,每张表只能有一个;唯一约束允许一个 NULL,并且可以有多个;外键保证引用完整性。
常见问题解答
「主键、外键与约束」课时是免费的吗?
是的 — 「主键、外键与约束」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 SQL Interview Prep 课程共包含 4 节课。
「主键、外键与约束」这节课中我会学到什么?
按照面试官希望听到的方式,解释键、唯一性和引用完整性 你通过在浏览器中直接运行的动手代码来练习 SQL Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「主键、外键与约束」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Interview Prep 课中编写并运行代码吗?
能。每节 SQL Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。