对于我的一个宠物项目,在information_schema
数据库中达到峰值并达到元数据,我很难理解它们之间的差异(如果有的话) create schema
命令和MySQL的create database
命令。
有什么不同吗?如果不是,这是关系数据库的一种相当典型的行为模式(我听说对于其他数据库,例如Oracle,模式存在于数据库中,而不是与数据库处于同一级别)。
谢谢!
答案 0 :(得分:128)
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的对应功能完全不同。