MySQL“创build模式”和“创build数据库” – 是否有任何区别

information_schema数据库中find一个高峰,并在我的一个宠物项目的元数据中find最高点,但我很难理解create schema命令和create database命令之间的差异(如果有的话)。

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

谢谢!

MySQL的文档说 :

CREATE DATABASE用给定的名字创build一个数据库。 要使用此语句,您需要数据库的CREATE特权。 CREATE SCHEMA是MySQL 5.0.2的CREATE DATABASE的同义词。

所以,这两条指令都是一样的。

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


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

该标准有一个“CREATE SCHEMA”命令,它为表和视图名称引入了多个名称空间。 所有的表和视图都是在“模式”中创build的。 我不知道该版本是否定义了对表和视图的一些跨模式访问,但是我认为它已经做到了。 AFAIR,没有产品(至less在当时)真的实现了它,整个概念比实践更理论。

OTOH,ISTR这个版本的标准没有“用户”或“创build用户”命令的概念,所以有产品使用“用户”的概念(谁有自己的名字空间的表和意见)来实施他们相当于“模式”。

这是一个系统不同的地方。

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

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

CREATE SCHEMA是CREATE DATABASE的同义词。 CREATE DATABASE语法

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

严格来说, 数据库模式之间的差异在MySql中是不存在的。

但是,在其他数据库引擎(如SQL Server)中则不是这种情况。 在SQL服务器中,

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

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

 SELECT * FROM your_table 

相当于:

 SELECT * FROM dbo.your_table 

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

例如,您可以创build一个名为sales的模式,其中包含发票债权人 (和任何与销售相关的任何其他表),以及另一个名为lookup的模式,其中包括诸如国家货币订阅types (以及用作外观的任何其他表up table)。

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

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

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

1) dbo ,默认模式。

2) guest包含可供访客用户使用的对象(“guest用户”是SQL Server术语中的一个特殊angular色,具有一些默认和高度限制的权限)。 几乎没有使用过。

3)信息模式视图使用的INFORMATION_SCHEMA

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

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

通过这种方式,上面提到的模式查找可以被数据库中的任何标准用户所使用(例如,只有SELECT权限),而一个名为supplierbankaccountdetails的表可能被分配在一个不同的模式中,称为financial ,并且只给用户在组accounts (只是一个例子,你明白了)。

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

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