MySQL 'create schema' and 'create database' - Is there any difference
在进入
有什么区别吗? 如果不是这样,这是关系数据库行为的一种相当典型的模式(我听说过,对于其他数据库(例如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所述,实际上可以为每个架构的不同用户提供不同的权限。
这样,可以使数据库中的任何标准用户都可以使用上面提到的模式查找(例如,仅
最后,再次引用同一本书:
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的对应功能完全不同。