MySQL'创建模式'​​和'创建数据库' - 有什么区别

时间:2009-08-02 20:05:27

标签: sql mysql oracle jdbc database

对于我的一个宠物项目,在information_schema数据库中达到峰值并达到元数据,我很难理解它们之间的差异(如果有的话) create schema命令和MySQL的create database命令。

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

谢谢!

6 个答案:

答案 0 :(得分:128)

documentation of MySQL says

  

CREATE DATABASE创建一个数据库   用给定的名字。要用这个   声明,你需要CREATE   数据库的特权。创建   SCHEMA是CREATE的同义词   DATABASE自MySQL 5.0.2起。

因此,这两条指令的表现似乎正常。

答案 1 :(得分:27)

Mysql documentation说:从MySQL 5.0.2开始,CREATE SCHEMA是CREATE DATABASE 的同义词。


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

该标准有一个“CREATE SCHEMA”命令,它有助于介绍 表和视图名称的多个名称空间。所有的表格和观点都是 在“架构”中创建。我不知道该版本是否已定义 一些对表和视图的跨模式访问,但我认为它确实如此。 AFAIR,没有产品(至少在当时)真正实现了它,整个   概念更多的是理论而不是实践。

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

这是系统不同的区域。

就行政管理而言,这不应该太重要, 因为在这里你还有分歧。

就你看应用程序代码而言,你“只”必须关心 一个应用程序从多个名称空间访问表的情况。 AFAIK,所有系统都支持语法“。”, 为此,名称空间是否是a的名称空间无关紧要 用户,“架构”或“数据库”。

答案 2 :(得分:7)

严格地说,MySql中没有数据库架构之间的区别。

但是,在其他数据库引擎(如SQL Server)中并非如此。在SQL server:,

  

每个表都属于数据库中名为数据库架构的一组对象。它是一个容器或命名空间(Querying Microsoft SQL Server 2012

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

SELECT *
FROM your_table

相当于:

SELECT *
FROM dbo.your_table

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

例如,您可以创建名为销售的架构,其中包含发票债权人等表格(以及与销售相关的任何其他内容) ,以及另一个称为查找的模式,其中包含国家货币 subscriptiontypes 等表格(以及使用的任何其他表格)作为查表)。

分配给特定域的表显示在SQL Server Studio Manager中,其架构名称前缀为表名(与属于默认 dbo 架构的表完全相同)

SQL Server中有特殊的模式。引用同一本书:

  

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

     

1) dbo ,默认架构。

     

2)来宾包含来宾用户可用的对象(“来宾用户”是SQL Server术语中的特殊角色,具有一些默认和高度限制的权限)。很少使用。

     

3) INFORMATION_SCHEMA ,由信息架构视图

使用      

4) sys ,专为SQL Server内部使用而保留

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

这样,上面提到的架构查找可供数据库中的任何标准用户使用(例如仅SELECT权限),而名为 supplierbankaccountdetails <的表/ em>可以在名为财务的不同架构中分配,并且只允许访问组accounts中的用户(只是一个示例,您明白了这一点)。

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

  

它与数据库架构表架构不同。前者是表的名称空间,而后者是表定义

答案 3 :(得分:6)

CREATE SCHEMA是CREATE DATABASE的同义词。 CREATE DATABASE Syntax

答案 4 :(得分:5)

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

答案 5 :(得分:0)

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

对于具有Oracle背景的人: MySQL“数据库”又称MySQL“模式”对应于Oracle模式。 MySQL和Oracle CREATE SCHEMA命令之间的区别在于Oracle中的区别 CREATE SCHEMA命令实际上并不创建模式,而是填充它 与表格和视图。 而且Oracle的CREATE DATABASE命令与MySQL的对应功能完全不同。