web-dev-qa-db-ja.com

MySQL 'スキーマの作成'および 'データベースの作成'-違いはありますか

information_schemaデータベースのピークを取得し、私のペットプロジェクトの1つmetadataをピークにすると、create schemaコマンドとcreate databaseコマンドの違いを(もしあれば)理解するのに苦労していますMySQLの場合。

違いはありますか?そうでない場合、これはリレーショナルデータベースのかなり一般的な動作パターンです(Oracleなどの他のデータベースでは、データベースと同じレベルではなく、データベースにスキーマが存在すると聞きました)。

ありがとう!

97
Bob

MySQLのドキュメントによると

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

したがって、これらの2つの命令が同じことを行うことは正常に思えます。

130
Pascal MARTIN

Mysql documentation says:CREATE SCHEMAは、MySQL 5.0.2以降のCREATE DATABASEの同義語です。


これはすべて、80年代半ばのSQLのANSI標準に戻ります。

この標準には「CREATE SCHEMA」コマンドがあり、テーブル名とビュー名に複数の名前空間を導入するのに役立ちました。すべてのテーブルとビューは「スキーマ」内で作成されました。そのバージョンがテーブルとビューへのスキーマ間アクセスを定義しているかどうかはわかりませんが、そうだと思います。 AFAIR、(少なくとも当時は)実際にそれを実装した製品はありませんでした。そのコンセプト全体は実践よりも理論でした。

OTOH、ISTRこのバージョンの標準には「ユーザー」または「ユーザーの作成」コマンドの概念がなかったため、「ユーザー」の概念を使用する製品がありました(ユーザーはテーブルとビュー)に相当する「スキーマ」を実装します。

これは、システムが異なる領域です。

管理に関する限り、ここでは違いがあるので、これはあまり重要ではありません。

アプリケーションコードを見る限り、1つのアプリケーションが複数の名前空間からテーブルにアクセスする場合にのみ気にする必要があります。知る限り、すべてのシステムは構文 "。"をサポートしています。このため、名前空間がユーザー、 "スキーマ"、または "データベース"の名前空間であるかどうかは関係ありません。

27
Sadegh

厳密に言えば、MySQLではDatabaseSchemaの違いは存在しません。

ただし、これは、SQL Serverなどの他のデータベースエンジンには当てはまりません。 SQLサーバー::

すべてのテーブルは、データベーススキーマと呼ばれるデータベース内のオブジェクトのグループに属します。コンテナまたは名前空間です( Querying Microsoft SQL Server 2012

既定では、SQL Serverのすべてのテーブルはdboと呼ばれる既定のスキーマに属します。特定のスキーマに割り当てられていないテーブルをクエリすると、次のようなことができます。

SELECT *
FROM your_table

次と同等です:

SELECT *
FROM dbo.your_table

現在、SQLサーバーでは異なるスキーマを作成できるため、同様の目的を共有するテーブルをグループ化できます。これは、データベースの整理に役立ちます。

たとえば、invoicescreditorders(およびその他の関連するテーブル)を使用して、salesというスキーマを作成できます。 (with sales)、およびlookupという別のスキーマ、countriescurrenciesなどのテーブルsubscriptiontypes(およびルックアップテーブルとして使用される他のテーブル)。

特定のドメインに割り当てられたテーブルは、スキーマ名がテーブル名の前に追加された状態でSQL Server Studio Managerに表示されます(デフォルトのdboスキーマに属するテーブルとまったく同じです)。

SQL Serverには特別なスキーマがあります。同じ本を引用するには:

組み込みのデータベーススキーマがいくつかあり、それらを削除または変更することはできません。

1)dbo、デフォルトのスキーマ。

2)guestguestユーザーが使用できるオブジェクトを含みます( "guest user"はSQL Server lingoの特別な役割であり、デフォルトの高度に制限された権限があります)。めったに使われません。

3)INFORMATION_SCHEMA、情報スキーマビューで使用

4)sys、SQL Serverの内部使用専用に予約済み

スキーマはグループ化のためだけではありません。 MSDN で説明されているように、実際には、スキーマごとに異なる権限を異なるユーザーに与えることができます。

この方法で、上記のスキーマlookupをデータベース内の標準ユーザー(たとえば、SELECT権限のみ)が利用できるようにすることができますが、supplierbankaccountdetailsfinancialと呼ばれる別のスキーマに割り当てられ、グループaccountsのユーザーにのみアクセスを許可することができます(ほんの一例、アイデアが得られます)。

最後に、同じ本をもう一度引用します。

同じではありませんDatabase SchemaTable Schema。前者はテーブルの名前空間ですが、後者はテーブル定義を参照します

7
Nicolas

CREATE SCHEMAは、CREATE DATABASEの同義語です。 CREATE DATABASE構文

6
Sergey Olontsev

データベースはスキーマのコレクションであり、スキーマはテーブルのコレクションです。しかし、MySQLでは同じ方法で使用します。

5
Arun Raja

したがって、MySQLの「データベース」とMySQLの「スキーマ」に違いはありません。これらは同じものの2つの名前-テーブルと他のDBオブジェクトの名前空間です。

Oracleのバックグラウンドを持つ人々:MySQL "データベース" a.k.a. MySQL "スキーマ"はOracleスキーマに対応します。 MySQLとOracleのCREATE SCHEMAコマンドの違いは、OracleではCREATE SCHEMAコマンドが実際にスキーマを作成するのではなく、テーブルとビューを移入することです。また、OracleのCREATE DATABASEコマンドは、MySQLの対応するコマンドとは非常に異なることを行います。

0
Oleg Khaykin