【sql笔试题】关系型数据库中常见的三个概念:主键(Primary Key)、外键(Foreign Key)和 Schema
下面分条说明关系型数据库中常见的三个概念:主键(Primary Key)、外键(Foreign Key)和 Schema。为了便于理解,示例 SQL 使用通用 ANSI 语法并穿插 MySQL/PostgreSQL 的差异说明。────────────────────────一、主键 (Primary Key)────────────────────────1. 定义• 表中用来唯一标识一行数据的
下面分条说明关系型数据库中常见的三个概念:主键(Primary Key)、外键(Foreign Key)和 Schema。为了便于理解,示例 SQL 使用通用 ANSI 语法并穿插 MySQL/PostgreSQL 的差异说明。
────────────────────────
一、主键 (Primary Key)
────────────────────────
-
定义
• 表中用来唯一标识一行数据的列或列组(组合主键)。
• 每张表最多只能有一个主键约束。 -
约束特性
• 唯一性:同一张表中任何两行主键值都不能重复。
• 非空:值不能为空(NOT NULL)。
• 稳定性:主键一般不修改,避免关联表大量更新。 -
实现细节
• 创建主键时,数据库会自动为其建立唯一索引。
• 可用单列(最常见的自增 ID、UUID)或多列组合:CREATE TABLE order_items ( order_id INT , line_no INT , product_id INT, PRIMARY KEY (order_id, line_no) ); -
作用
• 查询、更新、删除时的最快定位手段。
• 供外键引用,维系表间关系。
────────────────────────
二、外键 (Foreign Key)
────────────────────────
-
定义
• 表中的一个或一组列,这些列的值必须在另一张表(父表)对应主键或唯一键中存在,形成父子(引用)关系。 -
约束特性
• 保证引用完整性(Referential Integrity):子表不能存“孤儿”数据。
• 可为 NULL:如果关系是可选的,可允许 NULL 表示“尚未关联”。
• 可设置级联动作:ON DELETE CASCADE:父表删除行时,子表对应行也删除。ON UPDATE CASCADE:父表主键修改时,子表自动同步。
-
示例
CREATE TABLE customers ( customer_id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, amount DECIMAL(10,2), FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE ); -
作用
• 保证数据一致性:不允许订单指向不存在的客户。
• 提升建模清晰度:显式描述表之间的“一对多”“多对一”等关系。
────────────────────────
三、Schema
────────────────────────
-
概念层级(不同产品略有差异)
• ANSI/ISO SQL:Schema 是逻辑命名空间,用来组织数据库对象(表、视图、存储过程、类型 …)。
• PostgreSQL:一个数据库 (database) 里可以包含多个 schema;同名对象可以存在于不同 schema。
• Oracle:用户=schema,每个登录用户拥有自己的 schema。
• MySQL:传统上将 database 视为 schema,本身不再向下分层。 -
功能
• 逻辑隔离:同一数据库服务器上,不同业务或模块可放在不同 schema。
• 名称限定:schema_name.table_name,解决同名冲突。
• 权限粒度:可对 schema 级别授予/回收对象创建或访问权限。
• 方便迁移与备份:导出/导入特定 schema 即可完成业务级的数据迁移。 -
示例
-- PostgreSQL 创建 schema CREATE SCHEMA sales AUTHORIZATION alice; -- 在指定 schema 下建表 CREATE TABLE sales.orders ( order_id SERIAL PRIMARY KEY, order_date DATE ); -- 查询时显示加上前缀 SELECT * FROM sales.orders; -
与主键/外键的关系
• 主键、外键属于表级约束,表又隶属于某个 schema;因此可以把 schema 理解为“数据库对象的最外层分组”。
────────────────────────
四、小结
────────────────────────
- 主键:唯一且非空,用来标识行、建立索引并被其他表引用。
- 外键:子表指向父表主键/唯一键的列,强制数据引用有效,支持级联操作。
- Schema:数据库内的逻辑命名空间(或用户),用于组织、隔离、授权和管理大量对象。
理解这三个概念及其相互作用,是进行关系型数据库建模与性能优化的基础。
更多推荐
所有评论(0)