GEOZ

数据库模式(Schema)是数据库的组织和结构,但不同数据库系统对其定义不同

2026/8/18
数据库模式(Schema)是数据库的组织和结构,但不同数据库系统对其定义不同

AIAI Summary (BLUF)

数据库模式(Schema)是数据库的组织和结构,但不同数据库系统对其定义不同。MySQL中Schema与数据库同义,Oracle中Schema由用户拥有,SQL Server中则是独立实体。创建Schema的方式也各异,需要根据具体DBMS理解与操作。

核心洞察

这篇文章最让我意外的是 Oracle 的操作。直觉上 CREATE SCHEMA 自然是要创建一个 schema,Oracle 偏不,用户建好时 schema 就已经存在了。从 MySQL 切到 Oracle 的人很容易被这个差异绊一下,网上泛泛的说法很多,不如直接看官方文档。

核心结论

  1. 在 Oracle 中,CREATE SCHEMA 并不会创建 schema——用户一经建立,schema 就已存在;该语句实际用于在一个事务中关联表、视图和权限。

  2. 在 MySQL 中,SCHEMADATABASE 是官方定义上的同义词,CREATE SCHEMA 就等同于 CREATE DATABASE

  3. 在 SQL Server 中,schema 是数据库内部一个独立命名的实体,CREATE SCHEMA 会真正创建一个 schema 对象,既不等同于建库,也不只是辅助语句。

  4. 三大数据库对 schema 的定义并不一致:MySQL 视其为 database 的同义词,Oracle 将其归为数据库用户所有且每个用户仅有一个 schema,SQL Server 则将 schema 视为数据库内的独立实体。

  5. 国际标准 ISO/IEC 9075-1 将 schema 定义为“描述符的持久命名集合”,与三大商业数据库的具体实现存在差异。

模式是什么

数据库里 schema 这个词,念作 skee-muh 或 skee-mah,中文叫模式。它描述的是数据库的组织方式和数据结构。表、列、数据类型、视图、存储过程、主键、外键、表之间的关系,这些都在 schema 的范围内。

模式图是最好的理解方式。上面那张是简单例子,三个表,主键、外键标得清清楚楚,表之间的连线一眼就能看懂。下面那张复杂不少,整个图分成四个区域。Customer Data 那块管客户信息,姓名地址这类。Business 是业务数据,员工、商店位置、付款细节。Inventory 是库存,这里的产品是电影,所以包含片名、类别、演员。Views 是预定义的查询视角,用来跑评估类报表。

这些图不只是画出来好看的。MySQL Workbench 能直接从图里生成 CREATE TABLE 脚本,拿这个脚本就能建库。反过来,也能把已有数据库转成关系图。

Schema 和 Database 是否等同

这俩是不是一回事,完全取决于你用的是哪个数据库。

MySQL 的官方文档说得直白,物理上 schema 和 database 就是同义词。在 MySQL 的 SQL 语法里,SCHEMA 关键字可以直接替换 DATABASE,写 CREATE SCHEMA 就相当于 CREATE DATABASE。

Oracle 就反过来。Oracle 文档里说,某些对象能存在数据库里,但进不了 schema。模式和数据库不能画等号。

SQL Server 的说法跟 Oracle 类似,schema 是数据库内部一个独立的实体,也不能跟数据库混为一谈。

同一个词,三大数据库各给各的定义。刚开始接触数据库的人,被绕晕太正常了。

那 SQL 标准怎么定义?ISO/IEC 9075-1 把 schema 定义为描述符的持久命名集合。这个定义偏抽象,能看懂大概是在说一组持久化的描述结构就够了。

还有个渊源可以聊。schema 这个词来自希腊语 skhēma,原本的意思是形状、轮廓、方案。心理学里也用它,指的是人脑组织信息的模式。设计数据库之前,先分析数据之间有啥关系,这一步其实就是概念层面的 schema 设计。软件开发里讨论 schema 时还会分成概念模式、逻辑模式、物理模式、外部模式、内部模式,各有各的所指。

DBMS 的 schema 定义

MySQL 官方手册对 schema 的解释比较完整:一组互相关联的数据库对象,包括表、列、列的数据类型、索引、外键等。这些对象靠 SQL 语法连在一起,列组成表,外键引用表和列。逻辑上也应作为一个应用或框架的组成部分协同工作。MySQL 自带的 INFORMATION_SCHEMA 和 performance_schema 数据库,名字里的 schema 强调的就是表和列之间的紧密关系。

SQL Server 的技术文档干脆得多,schema 就是数据库里表、字段、数据类型、主键和外键的名称集合。

Oracle 的玩法完全不一样。官方文档说,schema 是数据的逻辑结构集合,归数据库用户所有,名字跟用户名相同。每个用户只拥有一个 schema。也就是说,在 Oracle 里建了用户,schema 就自动存在了,它不是一个能独立创建的东西。原文参考资料里给出了 MySQL 5.7 手册、SQL Server 2016 文档、Oracle 12c 文档的官方链接,感兴趣可以顺着去翻。

创建 Schema

三个数据库都支持 CREATE SCHEMA 语句,可执行起来的含义各走各路。

MySQL 里 CREATE SCHEMA 就是创建数据库。它就是 CREATE DATABASE 的同义词,两条语句随便用哪个都行。

Oracle 里 CREATE SCHEMA 实际不创建 schema。因为前面说了,用户一建,schema 就有了。这条语句真正的作用是在一条事务里把表、视图和权限一次性关联起来,省得分别发多条 SQL。

SQL Server 又不一样。CREATE SCHEMA 会真的创建一个独立命名的 schema 对象,创建之后可以往里加用户和对象。它不像 MySQL 那样等同于建库,也不像 Oracle 那样只是个辅助语句。

换个环境要重新查证

schema 这词在不同数据库里含义差得挺远。用哪个系统,就按哪个系统的规则理解。换到新环境,别急着建表,先把官方文档里对 schema 的定义翻清楚。

常见问题(FAQ)

数据库Schema和Database有什么区别?

两者关系因数据库而异。MySQL中Schema与Database同义;Oracle中Schema归用户所有,与Database不同;SQL Server中Schema是数据库内的独立实体。需按具体DBMS理解。

在Oracle中执行CREATE SCHEMA语句会怎样?

Oracle中用户创建时Schema已存在,CREATE SCHEMA不实际创建Schema,而是用于在单个事务内关联表、视图和权限,避免发送多条SQL,其行为与MySQL和SQL Server不同。

SQL Server中的Schema和MySQL中的一样吗?

不一样。SQL Server的Schema是数据库内独立命名的对象,可通过CREATE SCHEMA创建,并向其添加用户和对象。而MySQL中Schema与Database等同,Oracle中则自动存在且不单独创建。

Roger深圳
本文由 Roger 审核,最后更新于 2026年8月18日
联系编辑 →
← 返回文章列表
分享到:微博

版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。

文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。

若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。