MySQL“ create schema”和“ create database”-有什么区别吗

看一眼 information_schema数据库,看一眼我最喜欢的一个项目的 元数据,我很难理解 create schema命令和 MySQL 的 create database命令之间有什么(如果有的话)区别。

有什么不同吗?如果不是,这是关系数据库的一种相当典型的行为模式吗(我听说对于其他数据库,比如 Oracle,模式存在于数据库中,而不是与数据库处于同一级别)。

谢谢!

200302 次浏览

返回文章页面 MySQL 的文档说:

CREATEDATABASE 创建数据库 用给定的名称。使用这个 语句,则需要 CREATE 数据库的特权 SCHEMA 是 CREATE 的同义词 从 MySQL 5.0.2开始的数据库。

因此,这两个指令做同样的事情似乎是正常的。

CREATESchema 是 CREATEDATABASe.创建数据库语法的同义词

Myql 文档 说: 从 MySQL 5.0.2开始,CREATESchema 是 CREATEDATABASE 的同义词就已经存在了。


这一切都可以追溯到80年代中期的 ANSI SQL 标准。

该标准有一个“ CREATESCHEMA”命令,它用于引入 表和视图名称的多个名称空间 我不知道该版本是否定义了 一些对表和视图的跨模式访问,但我认为它做到了。 AFAIR,没有产品(至少在当时)真正实现了它,整个 与其说是实践,不如说是理论。

ISTR 这个版本的标准没有一个 OTOH 的概念 “ USER”或“ CREATEUSER”命令,因此有些产品使用 一个“用户”的概念(这个用户有自己的表和表的名称空间) 视图)来实现它们的等效“模式”。

这是一个系统不同的领域。

就政府而言,这应该无关紧要, 因为在这里你们有分歧。

至于应用程序代码,您“只”必须关心 一个应用程序从多个名称空间访问表的情况。 AFAIK,所有系统都支持一种语法, 为此,名称空间是否是 用户、“模式”或“数据库”。

数据库是架构的集合,架构是表的集合。但是在 MySQL 中他们使用同样的方式。

严格地说,数据库图式之间的区别在 MySql 中是不存在的。

但是,在其他数据库引擎(如 SQLServer)中则不是这样,

每个表都属于数据库中称为 数据库模式的一组对象,它是一个容器或名称空间(查询2012年 Microsoft SQL Server)

默认情况下,SQLServer 中的所有表都属于名为 Dbo的默认架构。当查询尚未分配给任何特定模式的表时,可以执行以下操作:

SELECT *
FROM your_table

相当于:

SELECT *
FROM dbo.your_table

现在,SQL 服务器允许创建不同的模式,这使您可以对具有相似用途的表进行分组。这有助于组织数据库。

例如,您可以创建一个名为 销售的模式,其中包含诸如 发票债权人指令(以及与销售相关的任何其他表)的表,以及另一个名为 查找的模式,其中包含诸如 国家货币订阅类型(以及任何其他用作查找表的表)的表。

分配给特定域的表在 SQLServerStudio Manager 中显示,并在表名前面加上模式名(与属于默认 Dbo模式的表完全相同)。

SQLServer 中有特殊的架构。引用同一本书:

有几个内置的数据库模式,它们不能删除或更改:

1) Dbo,默认模式。

2) 客人包含 访客用户可用的对象(“客户用户”是 SQL Server 行话中的一个特殊角色,具有一些默认和高度限制的权限)。很少用。

3) 信息 _ 方案,由信息架构视图使用

4) Sys,专供 SQLServer 内部使用

架构不仅用于分组。实际上可以为不同的用户提供不同的模式权限,如 MSDN所述。

通过这种方式,上面提到的模式 查找可以提供给数据库中的任何标准用户(例如,只有 SELECT权限) ,而一个称为 供应商银行帐户详情的表可以分配给另一个称为 金融的模式,并且只给予 accounts组中的用户访问权限(举个例子,你就明白了)。

最后,再次引用同一本书:

它不是相同的 数据库架构表模式。前者是表的名称空间,而后者引用表定义

因此,MySQL“数据库”和 MySQL“模式”之间没有区别: 它们是同一事物的两个名称——表和其他数据库对象的名称空间。

对于有甲骨文背景的人: MySQL“ database”又名 MySQL“ schema”对应于 Oracle 模式。 MySQL 和 Oracle CREATESCHEMA 命令之间的区别在于 Oracle CREATESCHEMA 命令实际上并不创建架构,而是填充架构 带有表格和视图。 Oracle 的 CREATEDATABASE 命令所做的事情与 MySQL 命令完全不同。

MySQL 的“数据库”和 MySQL 的“模式”之间没有区别: 它们是同一事物的两个名称