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

Bob*_*Bob 99 mysql sql database oracle jdbc

information_schema数据库中占据一席之地并在我的宠物项目的元数据上达到顶峰,我很难理解create schema命令和create databaseMySQL命令之间的差异(如果有的话).

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

谢谢!

Pas*_*TIN 132

MySQL文档说:

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

所以,这两条指令同样如此似乎是正常的.


Sad*_*egh 27

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


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

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

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

这是系统不同的领域.

就行政管理而言,这不应该太重要,因为在这里你无论如何都有分歧.

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

  • 什么是`ISTR`? (4认同)
  • 提供对原始来源的引用是正确的,从这里得到答案:http://lists.mysql.com/mysql/211647 (2认同)

Nic*_*las 7

严格地说,在MySql中,DatabaseSchema之间的区别是不存在的.

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

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

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

SELECT *
FROM your_table
Run Code Online (Sandbox Code Playgroud)

这相当于:

SELECT *
FROM dbo.your_table
Run Code Online (Sandbox Code Playgroud)

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

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

分配给特定域的表显示在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(只是一个例子,你明白了).

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

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


Ser*_*sev 6

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


Aru*_*aja 5

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