MySQLのスキーマ/データベースの違い


290

MySQLのスキーマとデータベースに違いはありますか?SQL Serverでは、データベースはスキーマとの関係で上位レベルのコンテナーです。

私はそれを読んCreate SchemaCreate Databaseスキーマとデータベースが同じオブジェクトに対して異なる単語であることを信じるように私をリードされ、MySQLの中で本質的に同じことを行います。


実際には、MySQLは一種のデータベースであり、複数の、時にはが含まれているため、多くの検索でターゲットを逃すschemaためdatabase、はより優れていると言えます。databaseusedatabase
theaws.blog

回答:


335

MySQL用語集で定義されているように:

MySQLでは、物理的に、スキーマデータベースと同義です。MySQL SQL構文のSCHEMA代わりにキーワードを置き換えることができDATABASEます。たとえば、CREATE SCHEMA代わりにを使用しますCREATE DATABASE

他のいくつかのデータベース製品は区別されます。たとえば、Oracle Database製品では、スキーマはデータベースの一部、つまり単一のユーザーが所有する表およびその他のオブジェクトのみを表します。


74
「他のいくつかのデータベース製品」は、他のほとんどすべてのデータベース(おそらくSQLiteを除いて、それは理解できます)の冒涜です。
Stefan Steiger

5
スキーマをデータベースと同義にすることは興味深いです-私は常にそれをユーザーオブジェクトに関連付けていました。そして、ユーザー/スキーマの概念を分離したSQLServerの友好的な言及により、柔軟性のボートロードと動的クエリを実行するいくつかの興味深い方法が可能になりました。
Gerard ONeill、2015

「スキーマ」をデータベースオブジェクトのグループとして定義することの厄介なことは、たとえばen.wikipedia.org/wiki/Database_schemaのように、単語の古い意味をオーバーロードすることです。
Mark E. Haase

1
@mehaaseはどちらも古い単語の意味です。OracleはSQL3(1999)さえも前にスキーマを持っていましたが、他のデータベースが本格的なデータベースを扱うようにそれらを扱いました。実際、Oracleは他のサーバーまたはサーバーインスタンスと呼ばれるものを「データベース」と呼んでいます。異なるバイナリ、異なる実行ファイル、異なるポートです。
Panagiotis Kanavos 2017

61

データベースサーバーによって異なります。MySQL気にしない、それは基本的に同じことです。

OracleDB2および他の企業レベル・データベース・ソリューションは、区別を行います。通常、スキーマはテーブルのコレクションであり、データベースはスキーマのコレクションです。


6
Microsoft SQL Serverでも、このケースOracleと非常によく似ていますDB2
RBT

2
MySQLでは、「データベース」と「スキーマ」は基本的に同じものではありません。それはまったく同じことである(例えば、create databasecreate schema同義語です)。Oracleでは、スキーマはユーザーと同義です(おそらくより正確には、スキーマはユーザーの下に作成されたすべてのオブジェクトのリストです)。MSSQLは3つすべてを区別します(その結果、異なるデータベースからテーブルにアクセスする場合、名前はデータベースとスキーマの両方で修飾する必要がありますdatabase1.dbo.table2
Mike Rosoft

17

参照のうえのMySQLのドキュメント

CREATE DATABASEは、指定された名前でデータベースを作成します。このステートメントを使用するには、データベースに対するCREATE特権が必要です。CREATE SCHEMAは、MySQL 5.0.2以降のCREATE DATABASEの同義語です。


7

PostgreSQLはデータベースのサブセットであるスキーマをサポートしています:https : //www.postgresql.org/docs/current/static/ddl-schemas.html

データベースには、1つ以上の名前付きスキーマが含まれ、スキーマにはテーブルが含まれます。スキーマには、データ型、関数、演算子など、他の種類の名前付きオブジェクトも含まれています。同じオブジェクト名を異なるスキーマで競合なく使用できます。たとえば、schema1とmyschemaの両方に、mytableという名前のテーブルを含めることができます。データベースとは異なり、スキーマは厳密に分離されていません。ユーザーは、接続するデータベース内の任意のスキーマ内のオブジェクトにアクセスすることができます(アクセスする権限がある場合)。

スキーマは入れ子にできないことを除いて、オペレーティングシステムレベルのディレクトリに似ています。

私の控えめな意見では、MySQLは参照データベースではありません。説明のためにMySQLを引用しないでください。MySQLは非標準SQLを実装しており、サポートしていない機能を要求する場合があります。たとえば、MySQLでは、CREATEスキーマはDATABASEのみを作成します。本当に誤解を招くユーザーです。

この種の語彙は、DBAによって「MySQLism」と呼ばれています。


2
そして、初心者のための混乱に追加するための「スキーマ」があります:)
Zeni

@Zeni MySQLのスキーマとは正確には何ですか?私が見つけることができるのは、information_schemaスキーマテーブルへの参照ですが、それが実際に何を意味するかについての簡潔な定義はありません
Alf47

@ Alf47「スキーマ」は、「スキーマ」という単語の複数形です。「スキーマ」も受け入れられますが、豪華ではありません:)
jobo3208

6

MySQL スキーマでは、データベースの同義語です。MySQLに飛び込んで初日からスキーマという単語を見つけた初心者にとっては非常に混乱するので、どちらも同じなので心配する必要はありません。

MySQLを初めて起動するときは、他のデータベースシステムと同様にデータベースを作成して、CREATE DATABASEにすぎないCREATE SCHEMAを作成できるようにする必要があります。

他のいくつかのデータベースシステムでは、スキーマはデータベースの一部またはテーブルのコレクションを表し、スキーマのコレクションはデータベースです。


3

はい、MySQLに関してこれらの用語は同じ意味で使用されます。しかし、多くの場合、データベースサーバー全体をデータベースとして不適切に言及しているのが聞こえます。


0

たとえば、Microsoft SQL Serverの場合、スキーマは単一のユーザーを指し、サーバー、データベース、スキーマ、テーブル、オブジェクトを示す順序でコンテナの別のレベルです。

たとえば、dbo.table_aを更新する予定で、構文がUPDATE table.aのように完全修飾されていない場合、DBMSは目的のテーブルを使用することを決定できません。基本的にデフォルトでは、DBMSはmyuser.table_aを使用します


スキーマは単一のユーザーが所有しています。デフォルトでは、データベースで作成されたユーザーは、dboスキーマをデフォルトのスキーマとして使用します。非完全修飾テーブル参照に使用されるデフォルトのスキーマは、そのユーザーに設定されているものです。
Gerard ONeill、2015

以前のバージョンのSQL Serverでは、ユーザーを削除すると、それに関連付けられていたスキーマが使用できなくなります。最近では、ユーザーとスキーマの間のマッピングはそれほど厳密ではありません。また、データベースとすべてのスキーマの所有者に単一の偽のアカウントを作成することがベストプラクティスと見なされています。
ジョナサンアレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.