关于sql:MySQL’create schema’和’create database’-有什么区别

MySQL 'create schema' and 'create database' - Is there any difference

在进入information_schema数据库并达到我的一个宠物项目的元数据的峰值时,我很难理解create schema命令和create database命令之间存在什么区别(如果有) MySQL的。

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

谢谢!


MySQL的文档说:

CREATE DATABASE creates a database
with the given name. To use this
statement, you need the CREATE
privilege for the database. CREATE
SCHEMA is a synonym for CREATE
DATABASE as of MySQL 5.0.2.

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


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

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

该标准有一个" CREATE SCHEMA"命令,它有助于引入
表和视图名称的多个名称空间。所有表和视图均为
在"模式"中创建。我不知道该版本是否已定义
对表和视图的一些跨模式访问,但是我认为确实可以。
AFAIR,整个过程中,没有任何产品(至少在那时)没有真正实现它
概念不仅仅是理论,还是实践。

OTOH,ISTR这个版本的标准没有概念
"用户"或"创建用户"命令,因此有些产品使用了
"用户"的概念(然后他为表和表拥有自己的名称空间
视图)以实现其等效的"模式"。

这是系统不同的领域。

就行政管理而言,这无关紧要,
因为在这里您仍然有差异。

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


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

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

Every table belongs to a grouping of objects in the database called database schema. It's a container or namespace (Querying Microsoft SQL Server 2012)

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

1
2
SELECT *
FROM your_table

等效于:

1
2
SELECT *
FROM dbo.your_table

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

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

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

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

There are several built-in database schemas, and they can't be dropped or altered:

1) dbo, the default schema.

2) guest contains objects available to a guest user ("guest user" is a special role in SQL Server lingo, with some default and highly restricted permissions). Rarely used.

3) INFORMATION_SCHEMA, used by the Information Schema Views

4) sys, reserved for SQL Server internal use exclusively

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

这样,可以使数据库中的任何标准用户都可以使用上面提到的模式查找(例如,仅SELECT权限),而可以在另一个称为Financial的模式中分配一个名为providerbankaccountdetails的表,并仅授予对accounts组中的用户(仅举一个例子,您就会明白)。

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

It isn't the same Database Schema and Table Schema. The former is the namespace of a table, whereas the latter refers to the table definition


CREATE SCHEMA是CREATE DATABASE的同义词。创建数据库语法


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


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

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