【问题标题】:MySQL 'create schema' and 'create database' - Is there any differenceMySQL 'create schema' 和 'create database' - 有什么区别吗
【发布时间】:2010-11-16 05:22:14
【问题描述】:

查看information_schema 数据库并查看我的一个宠物项目的元数据,我很难理解@ 之间有什么(如果有的话)差异987654322@ 命令和 MySQL 的 create database 命令。

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

谢谢!

【问题讨论】:

    标签: sql mysql oracle jdbc database


    【解决方案1】:

    documentation of MySQL says

    CREATE DATABASE 创建数据库 使用给定的名称。要使用这个 声明,你需要 CREATE 数据库的权限。创建 SCHEMA 是 CREATE 的同义词 MySQL 5.0.2 的数据库。

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

    【讨论】:

    • 太棒了!我假设架构是数据库实例的一部分。非常感谢!!
    【解决方案2】:

    CREATE SCHEMA 是 CREATE DATABASE 的同义词。 CREATE DATABASE Syntax

    【讨论】:

      【解决方案3】:

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


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

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

      OTOH,ISTR 这个版本的标准没有 a 的概念 “user”或“CREATE USER”命令,所以有些产品使用了 “用户”的概念(然后他有自己的表名称空间和 视图)来实现它们等效的“模式”。

      这是一个系统不同的领域。

      就管理而言,这不应该太重要, 因为无论如何在这里你都有不同。

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

      【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        严格来说,DatabaseSchema的区别在MySql中是不存在的。

        但是,在 SQL Server 等其他数据库引擎中并非如此。在 SQL 服务器中:,

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

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

        SELECT *
        FROM your_table
        

        相当于:

        SELECT *
        FROM dbo.your_table
        

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

        例如,您可以创建一个名为 sales 的架构,其中包含 invoicescreditorders 等表(以及与销售相关的任何其他表) ,以及另一个名为 lookup 的模式,其中包含 countriescurrenciessubscriptiontypes 等表(以及使用的任何其他表作为查找表)。

        分配给特定域的表显示在 SQL Server Studio 管理器中,表名前附加架构名称(与属于默认 dbo 架构的表完全相同) .

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

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

        1) dbo,默认架构。

        2) guest 包含可供guest 用户 使用的对象(“guest 用户”是 SQL Server 术语中的特殊角色,具有一些默认和高度受限的权限)。很少使用。

        3) INFORMATION_SCHEMA,由信息架构视图使用

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

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

        这样做,上面提到的模式 lookup 可以提供给数据库中的任何标准用户(例如 SELECT 权限),而名为 supplierbankaccountdetails 的表 可以分配在一个名为 financial 的不同架构中,并且只授予组 accounts 中的用户访问权限(只是一个例子,你明白了)。

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

        Database SchemaTable Schema 不是同一个。前者是表的命名空间,后者指的是表定义

        【讨论】:

          【解决方案6】:

          因此,MySQL“数据库”和 MySQL“模式”之间没有区别:它们是同一事物的两个名称——表和其他数据库对象的命名空间。

          对于有 Oracle 背景的人: MySQL“数据库”又名 MySQL“模式”对应于 Oracle 模式。 MySQL 和 Oracle CREATE SCHEMA 命令的区别在于 Oracle CREATE SCHEMA 命令实际上并不创建模式,而是填充它 与表和视图。 Oracle 的 CREATE DATABASE 命令与 MySQL 对应的命令完全不同。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-03
            • 1970-01-01
            • 2017-07-25
            • 1970-01-01
            • 2016-03-06
            • 1970-01-01
            • 2013-06-11
            • 2020-10-01
            相关资源
            最近更新 更多