0Pricing
SQL Interview Prep · 课时

主键、外键与约束

按照面试官希望听到的方式,解释键、唯一性和引用完整性

主键、外键与约束 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是 SQL,以及面试官为什么会问它
  2. 逻辑查询执行顺序
  3. 主键、外键与约束
  4. 在压力下阅读架构
← 返回 SQL Interview Prep