MySQL的Schema是什么? - 公众号

news/2025/9/21 19:21:41/文章来源:https://www.cnblogs.com/JavaEdge/p/19104009

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

1 Schema概念

schema在数据库领域,表示数据库对象的集合,包含各种对象如:表、视图、存储过程和索引等。

SQL 标准

一个数据库(Database)可包含多个模式(Schema),模式是数据库对象的逻辑容器。

Oracle

Schema 与用户(User)强绑定。创建用户时就等于创建了一个同名 Schema。用户(user)就是 schema 的拥有者,用户名称与 schema 名通常一致。一般一个用户对应一个集合,为了区分,需给不同集合起名。其实一个用户/角色可拥有多个 schema,多个用户也可以访问同一个 schema(通过权限授权)。

用户的schema名相当于用户名,并作为该用户的缺省schema。所以schema集合看上去像用户名。如访问一个数据表时,若该表未指明属于哪个schema,系统会自动加上默认schema:

PostgreSQL

schem是数据库内的命名空间,可由任一角色拥有;数据库中常见的 public schema 与角色不一一对应,角色可以拥有多个 schema,schema 名不等于用户名。解析未限定对象时依赖 search_path(搜索路径)。

SQL Server

自 SQL Server 2005 起,schema 与数据库用户分离(schema 是命名空间,用户可有默认 schema,如 dbo)。所以 username ≠ schema name(尽管历史上两者关系紧密)。用户可以有默认 Schema,但 Schema 本身是独立对象。

MySQL

databaseschema 视作同义词(CREATE SCHEMA = CREATE DATABASE);MySQL 没有像 PostgreSQL 那样的 schema 命名空间概念。

2 Schema的创建

在不同数据库中要创建的Schema方法不一,但共同点是都支持CREATE SCHEMA语句。MySQL中可通过CREATE SCHEMA创建一个数据库。

不同 DBMS 的 CREATE SCHEMA 语义和可用选项不同,如:

  • PostgreSQL 支持 CREATE SCHEMA name AUTHORIZATION owner
  • Oracle 的 CREATE SCHEMA 语法存在但不常用于创建用户,通常用 CREATE USER 来建立 schema 所属的用户)

Oracle / PostgreSQL / MySQL / SQL Server 在 schema 概念、默认行为和常用语法上的差异:

  • PostgreSQL
CREATE SCHEMA myschema AUTHORIZATION myrole;
SET search_path TO myschema, public;
-- unqualified object -> 按 search_path 解析
  • SQL Server
CREATE SCHEMA Sales AUTHORIZATION dbo;
ALTER USER alice WITH DEFAULT_SCHEMA = Sales;
-- 未限定的表名先在 alice 的默认 schema 中查找,再到 dbo 等
  • MySQL
CREATE DATABASE mydb;   -- 或 CREATE SCHEMA mydb;
USE mydb;
CREATE TABLE t1 (...);
  • Oracle(常见用法)
CREATE USER scott IDENTIFIED BY tiger;
GRANT CONNECT, RESOURCE TO scott;
-- scott 有自己的 schema(对象以 scott. 开头)

3 默认解析规则

不同数据库在你未显式指定 Schema 时,解析对象名的方式不同:

PostgreSQL

使用 search_path 参数决定解析顺序:

SET search_path TO myschema, public;
SELECT * FROM mytable;  -- 优先在 myschema 中查找

默认包含 "$user", public,即先尝试与当前用户名同名的 Schema,再找 public

SQL Server

用户有一个 默认 Schema

ALTER USER alice WITH DEFAULT_SCHEMA = Sales;
SELECT * FROM Orders;   -- 会先到 Sales.Orders 查找

如果对象在默认 Schema 不存在,会尝试 dbo

MySQL

使用 USE dbname 设置当前数据库:

USE mydb;
SELECT * FROM mytable;  -- 实际为 mydb.mytable

没有独立的 Schema 概念。

Oracle

登录用户的名字就是 Schema:

CONNECT scott/tiger;
SELECT * FROM emp;  -- 实际为 scott.emp

若要访问其他用户对象,需要显式加前缀(如 hr.employees)并具备权限。

4 权限与所有权

创建 Schema

PostgreSQL

CREATE SCHEMA myschema AUTHORIZATION alice;

alice 拥有该 Schema,对象默认归她所有。

SQL Server

CREATE SCHEMA Sales AUTHORIZATION dbo;

MySQL

CREATE DATABASE mydb;  -- 或 CREATE SCHEMA mydb;

Oracle
通常通过 CREATE USER 创建用户即可间接创建 Schema。

授权访问

PostgreSQL

GRANT USAGE ON SCHEMA myschema TO bob;
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO bob;

SQL Server

GRANT SELECT ON SCHEMA::Sales TO bob;

Oracle

GRANT SELECT ON scott.emp TO hr;

修改默认 Schema / 搜索路径

  • PostgreSQL:SET search_path
  • SQL Server:ALTER USER … WITH DEFAULT_SCHEMA
  • MySQL:USE dbname
  • Oracle:无直接机制,登录用户默认使用自身 Schema

5 Schema vs Database vs Catalog

Database

  • SQL 标准:数据库是 Catalog 的一种实现,包含多个 Schema。
  • 实际上,不同产品语义不同:
    • PostgreSQL:一个 Database 包含多个 Schema。
    • SQL Server:一个 Database 包含多个 Schema。
    • Oracle:一个数据库实例通常只包含一组用户 Schema。
    • MySQL:Database 与 Schema 等价

Schema

命名空间,组织数据库对象。

Catalog

SQL 标准中的更大逻辑容器,常对应一个数据库实例。实际中较少直接使用。

6 总结

四大主流数据库 Schema 特性对照:

特性 Oracle PostgreSQL SQL Server MySQL
Schema 与用户关系 用户 = Schema(1:1),创建用户即创建 Schema Schema 独立于用户,用户可拥有多个 Schema 自 2005 起,Schema 与用户分离;用户有默认 Schema Schema = Database;无独立 Schema 概念
默认 Schema 行为 登录用户即默认 Schema,例如 scott.emp search_path 决定,默认 "$user", public 用户默认 Schema(可改),否则 fallback 到 dbo USE dbname 设定当前数据库,表解析为 dbname.table
创建方式 CREATE USER scott IDENTIFIED BY pwd;(即创建 Schema) CREATE SCHEMA myschema AUTHORIZATION alice; CREATE SCHEMA Sales AUTHORIZATION dbo; CREATE DATABASE mydb;CREATE SCHEMA mydb;
跨 Schema 访问 hr.employees(需权限) other_schema.table(需 USAGE 权限) Sales.Orders(需权限) otherdb.table(需权限)
权限控制 GRANT SELECT ON scott.emp TO hr; GRANT USAGE ON SCHEMA myschema TO bob;``GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO bob; GRANT SELECT ON SCHEMA::Sales TO bob; GRANT SELECT ON mydb.mytable TO 'bob'@'host';
修改默认 Schema 不支持(用户即 Schema) SET search_path TO myschema, public; ALTER USER alice WITH DEFAULT_SCHEMA = Sales; USE dbname;
术语说明 Schema ≈ User Database ⊃ Schema Database ⊃ Schema Schema = Database
  • Oracle:用户就是 Schema
  • PostgreSQL:Schema 是独立命名空间,靠 search_path 解析
  • SQL Server:Schema 独立,用户有默认 Schema,常见是 dbo
  • MySQL:Schema = Database,没有独立命名空间

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户态与内核态的深度解析:安全、效率与优化之道 - 教程

用户态与内核态的深度解析:安全、效率与优化之道 - 教程2025-09-21 19:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

推动安全研究多元化的10万美元捐赠计划

Trail of Bits宣布通过SummerCon会议捐赠10万美元支持年轻安全研究者,特别关注女性和少数群体。该计划包含资金资助、导师指导及会议演讲机会,并推动安全会议演讲者构成的多元化改革。Trail of Bits捐赠10万美元通过…

20250919

20250919T1 蒜头看演出 异或哈希即可。代码 #include <iostream> #include <string.h> #include <random> #include <set> #include <map> using namespace std; random_device rd; mt…

完整教程:AI+虚拟仿真开启材料工程专业学习与实践新篇章

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:体验感满满—万物皆可插入

详细介绍:体验感满满—万物皆可插入pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

支付宝的对账单下载

easy版:LocalDate yesterday = LocalDate.now().minusDays(1);LocalDate selectDay = LocalDate.of(2025,9,15);String Mon = "2025-08";String billDate = yesterday.format(DateTimeFormatter.ofPattern(…

1.6μVRMS超低噪声、20V、200mA低静态电流线性稳压器IBSP3030,替代LT3042、GM1201

1.6μVRMS超低噪声、20V、200mA低静态电流线性稳压器IBSP3030,替代LT3042、GM1201 20V、500mA低噪声,低静态电流线性稳压器IBSP3032替代ADP7118、GM1207 12V、200mA、3μVRMS超低噪声LDO IBSP3032替代GM1211 IBSP303…

[NOIP2022] 建造军营 解题报告

简要题意 给定一个 \(n\) 个点,\(m\) 条边的无向图。你可以选择若干个点和边,满足去掉一条原图中除”被选择的边“的边后,被选择的点仍然两两可达。询问选择点和边的方案数。 分析 首先,这是连通性相关问题,考虑 …

ABC 424 D-F 题解

讲个笑话: 调了 inf 年做出来半个 D 我咋这么菜 居然爆搜就能过??( D - 2x2 Erasing 2 算是斗胆在场上使用状压 dp 了,没分析明白多记了一维无用状态,因为重复使用了变量 i 调了 inf 年,算复杂度的时候忘了是多…

爱锋拍照工具 - 技术支持

爱锋拍照工具 - 技术支持 📞 联系方式 技术支持邮箱: 43789540@qq.com 技术支持电话: 13524827494 工作时间: 周一至周五 9:00-18:00 🔧 常见问题解答 扫码相关问题 Q: 扫描二维码没有反应? A: 请确保二维码清晰完…

WPF资源字典合并报错 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

123213123

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0; }public class Main {public static void main(String[] args) {System.out.println("Hello…

探索 CSS 过渡:打造流畅网页交互体验 - 教程

探索 CSS 过渡:打造流畅网页交互体验 - 教程2025-09-21 18:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

详细介绍:项目首次推送到GitHub、指令步骤(下)

详细介绍:项目首次推送到GitHub、指令步骤(下)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

完整教程:【音视频】WebRTC 音视频延时、同步分析以及超低延时优化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

​​[硬件电路-240]:为什么高频信号的电路的处理难度要比直流信号、电频信号处理的难度倍增? - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安卓免费词典,查字查词机制超全

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:EasyCVR在智慧城市中场景中的核心应用与实践方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算多项式的值

//描述假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。 //输入输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。 //输出输出一个实数,即…

Ubuntu操作便捷的系统下运用mysql、mongodb、redis

Ubuntu操作便捷的系统下运用mysql、mongodb、redispre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…