1. 外键约束的本质与实现原理
外键约束是关系型数据库确保数据完整性的重要机制。它通过在子表中创建指向父表主键的引用,强制维护表间的关联关系。当我们在books表中设置author_id字段为外键,并关联到authors表的id主键时,数据库会自动执行以下检查:
- 插入或更新books表时,author_id值必须在authors表中存在对应记录
- 尝试删除authors表的记录时,如果该记录被books表引用,操作会被阻止(除非设置级联操作)
sql复制-- 创建带外键约束的表
CREATE TABLE authors (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE books (
id INT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
author_id INT,
FOREIGN KEY (author_id) REFERENCES authors(id)
ON DELETE CASCADE
ON UPDATE SET NULL
);
注意:ON DELETE CASCADE表示父表记录删除时自动删除子表关联记录,ON UPDATE SET NULL表示父表主键更新时将子表外键设为NULL。根据业务需求谨慎选择级联操作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多表查询的核心连接类型解析
2.1 内连接(INNER JOIN)实战
内连接是最常用的连接方式,只返回两表中匹配的记录。以下查询获取有销售记录的图书信息:
sql复制SELECT b.id, b.title, s.sale_date, s.quantity
FROM books b
INNER JOIN sales s ON b.id = s.book_id;
当books表有100条记录,sales表有80条记录时:
- 如果50本书有销售记录,结果集将包含50条记录
- 其余50本无销售记录的图书不会出现在结果中
2.2 左外连接(LEFT JOIN)的典型场景
左连接保留左表全部记录,右表无匹配时填充NULL。适合需要展示主表完整信息的场景:
`
