MySQL中模式/数据库的区别

384

MySQL中的schema和数据库有什么区别吗?在SQL Server中,数据库是相对于schema的更高级别的容器。

我了解到,在MySQL中,Create SchemaCreate Database基本上是做同样的事情,这让我认为schema和database是指同一对象的不同术语。


实际上,我会说schemadatabase更好,因为MySQL是一种数据库,它包含多个database,有时你会use一个database,这会导致许多搜索错过目标。 - dz902
10个回答

447

根据MySQL词汇表的定义:

在MySQL中,物理上,一个schema等同于一个数据库。在MySQL SQL语法中,您可以用关键字SCHEMA代替DATABASE,例如使用CREATE SCHEMA代替CREATE DATABASE

其他一些数据库产品则有所区别。比如,在Oracle Database产品中,一个schema仅表示数据库的一部分:一个单独用户拥有的表和其他对象。


116
我认为“其他数据库产品”实际上是指几乎所有其他的数据库(或许除了SQLite,但这也可以理解)。 - Stefan Steiger
7
将模式与数据库视为同义词很有意思——我一直将其与用户对象联系在一起。还友好地提到了SQLServer,它分离了用户/模式的概念,允许大量灵活性和一些有趣的方法来进行动态查询。 - Gerard ONeill
2
定义“模式”为数据库对象的分组的令人讨厌之处在于它重载了该词的旧含义,例如https://en.wikipedia.org/wiki/Database_schema。 - Mark E. Haase
2
@mehaase 这两个词都是旧词的意思。甚至在 SQL3(1999)之前,Oracle 就已经有了模式,尽管它将其视为其他数据库会处理完整数据库的方式。实际上,Oracle 将“数据库”称为其他人称为服务器或服务器实例的东西 - 不同的二进制文件、不同的可执行文件、不同的端口。 - Panagiotis Kanavos
对于新手使用MySQL的用户来说,应该特别注意这一点,因为删除模式可能会产生意想不到的后果。也就是说,在我看来,DROP SCHEMA 等同于 DROP DATABASE。 - Chris

96

取决于数据库服务器。 MySQL 不在意,基本上是同一件事。

OracleDB2 和其他企业级数据库解决方案有所区别。通常一个模式是表的集合,而数据库是模式的集合


7
即使是 Microsoft SQL Server,在这种情况下也有非常类似于“Oracle”和“DB2”的区别。 - RBT
7
在MySQL中,“database”和“schema”基本上不是同一回事;它们实际上是完全相同的东西(例如,“create database”和“create schema”是同义词)。在Oracle中,模式与用户是同义词(更准确地说,模式是在用户下创建的所有对象的列表)。MSSQL区分了这三个概念(因此,从不同数据库访问表时,必须同时限定数据库和模式名称,例如,“database1.dbo.table2”)。 - Mike Rosoft
在早期版本的SQL Server中,模式实际上是一个用户。谢天谢地,现在不再是这样了。 - Jonathan Allen

23

参考 MySql 文档

CREATE DATABASE 根据给定的名称创建一个数据库。要使用此语句,您需要该数据库的 CREATE 权限。自MySQL 5.0.2版本以来,CREATE SCHEMA 是 CREATE DATABASE 的同义词。


21
PostgreSQL 支持模式,它是数据库的子集: https://www.postgresql.org/docs/current/static/ddl-schemas.html 引用块:

一个数据库包含一个或多个命名模式(schema),每个模式包含表和其他类型的命名对象,例如数据类型、函数和运算符。同一对象名称可以在不同的模式中使用而不冲突;例如,schema1 和 myschema 都可以包含名为 mytable 的表。与数据库不同,模式没有严格分离:如果用户具有权限,则可以访问所连接到的数据库中任何模式中的对象。

模式类似于操作系统级别的目录,但模式不能嵌套。

以我个人谦虚的看法,MySQL 不是参考数据库。您永远不应该引用 MySQL 来解释问题。MySQL 实现了非标准 SQL 并有时声称支持它不支持的功能。例如,在 MySQL 中,CREATE schema 只会创建 DATABASE。这真的误导用户。

DBA 称此类词汇为 “MySQLism”。


4
然后对于初学者来说,“模式”会增加困惑。 - Zeni
@Zeni,MySQL中的schemata是什么?我只能找到有关information_schema schemata表的参考资料,但没有简明扼要地定义它的含义。 - Alf47
1
@Alf47,“schemata”只是“schema”的复数形式。“schemas”也可以接受,但不够高雅 :) - jobo3208

11

在MySQL中,schemadatabase的同义词。对于那些第一次接触MySQL并在第一天发现这个词schema的初学者来说,可能会感到困惑,但是没关系,因为它们都是相同的。

当您第一次启动MySQL时,需要创建一个数据库(与任何其他数据库系统一样)以便进行操作,因此您可以使用CREATE SCHEMA,而其实就是CREATE DATABASE

在其他一些数据库系统中,schema代表数据库的一部分或表的集合,且多个schema的集合即构成了一个数据库。


5

是的,人们在提到MySQL时会将这些术语混用。虽然往往你会听到人们不恰当地把整个数据库服务器称为数据库。


3

如果你在思考或讨论Mysql,那么就给个简单的答案:

"SCHEMA和DATABASE在mysql中完全是相同的东西,只是一种合成糖。"


1

例如,Microsoft SQL Server中的模式是指单个用户,并且在指示服务器、数据库、模式、表和对象的顺序中是另一级容器。

例如,当您打算更新dbo.table_a并且语法不是完全限定的,例如UPDATE table.a,DBMS无法决定使用预期的表。基本上,默认情况下,DBMS将使用myuser.table_a。


模式(Schema)由单个用户“拥有”。默认情况下,在数据库中创建的用户使用dbo模式作为其默认模式。对于非完全限定表引用所使用的默认模式是该用户设置的模式。 - Gerard ONeill
1
在旧版本的SQL Server中,删除用户会使与之关联的模式无法使用。如今,用户和模式之间的映射不再那么严格。此外,最佳实践是创建一个单一的虚拟账户作为数据库和所有模式的所有者。 - Jonathan Allen

1

请添加更多信息:

MongoDB还将schemadatabase区分开来。

schema代表表格,也就是database的结构。


0

与Postgres不同,SQL Server模式是一组具有相同内容的数据库,但在MySQL中,模式和数据库是相同的。MySQL不支持模式的概念。在MySQL中,模式和数据库是同义词。

当用户连接到MySQL时,他们并没有连接到特定的数据库。相反,他们可以访问任何他们有权限的表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接