MySQL“创建模式”和“创建数据库”-有什么区别


104

对于一个宠物项目,在information_schema数据库中达到了顶峰并在元数据上达到了顶峰,我很难理解该create schema命令与create databaseMySQL命令之间的区别(如果有)。

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

谢谢!

Answers:


139

MySQL文档说

CREATE DATABASE创建具有给定名称的数据库。要使用此语句,您需要数据库的CREATE特权。从MySQL 5.0.2开始,CREATE SCHEMA是CREATE DATABASE的同义词。

因此,这两个指令执行相同操作似乎很正常。


1
优秀的!我假设架构是数据库实例的一部分。非常感谢!!
ass

27

Mysql文档说:CREATE SCHEMA是自MySQL 5.0.2起CREATE DATABASE的同义词


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

该标准具有“ CREATE SCHEMA”命令,并且它为表和视图名称引入了多个名称空间。所有表和视图都是在“架构”中创建的。我不知道该版本是否定义了对表和视图的一些跨模式访问,但是我认为是的。AFAIR,没有产品(至少在那时还没有)真正实现它,整个概念更多是理论而非实践。

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

这是系统不同的领域。

就行政管理而言,这无关紧要,因为无论如何,您在这里还是有分歧的。

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


@DerMike我似乎想起了,internetslang.com
ISTR-含义-definition.asp

2
给出原始来源的引用是正确的,该来源是从该来源获得的:lists.mysql.com/mysql/211647
informatik01

@ informatik01除非Adinochestva是原始海报。
FanaticD 2015年

SQL Server将SCHEMA实现为数据库中的一组表/类型/ ..
Gudgip,

7

严格来说,MySql中不存在数据库架构之间的区别。

但是,在其他数据库引擎(例如SQL Server)中却不是这种情况。在SQL Server中:

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

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

SELECT *
FROM your_table

等效于:

SELECT *
FROM dbo.your_table

现在,SQL Server允许创建不同的架构,这使您可以对具有相似目的的表进行分组。这有助于组织数据库。

例如,您可以创建一个名为sales的架构,其中包含诸如发票贷方订单(以及与销售相关的任何其他表格)的表,以及另一个名为lookup的架构,其中具有诸如countrycurrencysubscriptiontypes等表(以及用作外观的任何其他表)上表)。

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

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

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

1)dbo,默认模式。

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

3)INFORMATION_SCHEMA,由信息架构视图使用

4)sys,仅供SQL Server内部使用

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

这样一来,架构查找上述数据库可以提供给任何标准的用户(例如SELECT只有权限),而表称为supplierbankaccountdetails可以在一个名为不同的模式来分配资金,并给予在只对用户的访问小组accounts(仅举一个例子,您就会明白)。

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

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




1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.