浏览 information_schema
数据库并查看其中一个我自己的项目的元数据时,我很难理解 MySQL 中 create schema
命令和 create database
命令之间是否有任何区别。
它们之间有区别吗? 如果没有,这是否是关系数据库的常见行为模式(我听说对于其他数据库,如 Oracle,模式存在于数据库中,而不是与数据库处于相同级别)。
谢谢!
MySQL文档中提到:
CREATE DATABASE使用给定的名称创建数据库。要使用此语句,您需要拥有该数据库的CREATE权限。从MySQL 5.0.2开始,CREATE SCHEMA是CREATE DATABASE的同义词。
因此,这两个指令看起来应该具有相同的功能。
Mysql文档中提到:从MySQL 5.0.2开始,CREATE SCHEMA是CREATE DATABASE的同义词。
这一切都可以追溯到20世纪80年代中期SQL的ANSI标准。
该标准有一个"CREATE SCHEMA"命令,它用于为表和视图名称引入多个命名空间。所有表和视图都在一个"schema"中创建。我不知道那个版本是否定义了一些跨模式访问表和视图的方法,但我认为它确实这样做了。至少在那个时候,没有任何产品真正实现它,整个概念更多的是理论而非实践。
另一方面,我记得这个标准版本没有"user"或"CREATE USER"命令的概念,因此有些产品使用了"用户"(然后拥有自己的表和视图名称空间)的概念来实现其等效的"模式"。
这是系统之间存在差异的领域。
就管理而言,这应该并不重要,因为这里你们本来就有所不同。
就应用程序代码而言,您“只需要”关注一个应用程序访问多个命名空间的情况。据我所知,所有系统都支持一种语法".",因此无论名称空间是用户、"schema"还是"database",这都不会有太大影响。
严格来说,在 MySql 中,数据库(Database)和模式(Schema)之间的区别不存在。
然而,在其他数据库引擎如 SQL Server 中,情况并非如此。在 SQL Server 中:
每个表都属于数据库中被称为数据库模式的对象分组。它是一个容器或命名空间(Querying Microsoft SQL Server 2012)
默认情况下,SQL Server 中的所有表都属于名为dbo的默认模式。当您查询尚未分配到任何特定模式的表时,可以执行以下操作:
SELECT *
FROM your_table
这相当于:
SELECT *
FROM dbo.your_table
SELECT
权限),而名为supplierbankaccountdetails的表可能被分配到称为financial的不同模式中,并且只向组accounts
中的用户授予访问权限(这只是一个示例,你明白了吧)。
最后,引用同一本书的话:
它并不是相同的数据库模式和表模式。前者是表的命名空间,而后者是指表的定义。
数据库是一组模式的集合,而模式是表的集合。但在MySQL中,它们使用相同的方式。
MySQL的"database"和"schema"没有区别:它们是同一件事情的两个名称。