回答:
MySQL用語集で定義されているように:
MySQLでは、物理的に、スキーマはデータベースと同義です。MySQL SQL構文の
SCHEMA
代わりにキーワードを置き換えることができDATABASE
ます。たとえば、CREATE SCHEMA
代わりにを使用しますCREATE DATABASE
。他のいくつかのデータベース製品は区別されます。たとえば、Oracle Database製品では、スキーマはデータベースの一部、つまり単一のユーザーが所有する表およびその他のオブジェクトのみを表します。
データベースサーバーによって異なります。MySQL
気にしない、それは基本的に同じことです。
Oracle
、DB2
および他の企業レベル・データベース・ソリューションは、区別を行います。通常、スキーマはテーブルのコレクションであり、データベースはスキーマのコレクションです。
Oracle
と非常によく似ていますDB2
。
create database
とcreate schema
同義語です)。Oracleでは、スキーマはユーザーと同義です(おそらくより正確には、スキーマはユーザーの下に作成されたすべてのオブジェクトのリストです)。MSSQLは3つすべてを区別します(その結果、異なるデータベースからテーブルにアクセスする場合、名前はデータベースとスキーマの両方で修飾する必要がありますdatabase1.dbo.table2
)
参照のうえのMySQLのドキュメント、
CREATE DATABASEは、指定された名前でデータベースを作成します。このステートメントを使用するには、データベースに対するCREATE特権が必要です。CREATE SCHEMAは、MySQL 5.0.2以降のCREATE DATABASEの同義語です。
PostgreSQLはデータベースのサブセットであるスキーマをサポートしています:https : //www.postgresql.org/docs/current/static/ddl-schemas.html
データベースには、1つ以上の名前付きスキーマが含まれ、スキーマにはテーブルが含まれます。スキーマには、データ型、関数、演算子など、他の種類の名前付きオブジェクトも含まれています。同じオブジェクト名を異なるスキーマで競合なく使用できます。たとえば、schema1とmyschemaの両方に、mytableという名前のテーブルを含めることができます。データベースとは異なり、スキーマは厳密に分離されていません。ユーザーは、接続するデータベース内の任意のスキーマ内のオブジェクトにアクセスすることができます(アクセスする権限がある場合)。
スキーマは入れ子にできないことを除いて、オペレーティングシステムレベルのディレクトリに似ています。
私の控えめな意見では、MySQLは参照データベースではありません。説明のためにMySQLを引用しないでください。MySQLは非標準SQLを実装しており、サポートしていない機能を要求する場合があります。たとえば、MySQLでは、CREATEスキーマはDATABASEのみを作成します。本当に誤解を招くユーザーです。
この種の語彙は、DBAによって「MySQLism」と呼ばれています。
たとえば、Microsoft SQL Serverの場合、スキーマは単一のユーザーを指し、サーバー、データベース、スキーマ、テーブル、オブジェクトを示す順序でコンテナの別のレベルです。
たとえば、dbo.table_aを更新する予定で、構文がUPDATE table.aのように完全修飾されていない場合、DBMSは目的のテーブルを使用することを決定できません。基本的にデフォルトでは、DBMSはmyuser.table_aを使用します
schema
ためdatabase
、はより優れていると言えます。database
use
database