information_schema
データベースのピークを取得し、私のペットプロジェクトの1つmetadataをピークにすると、create schema
コマンドとcreate database
コマンドの違いを(もしあれば)理解するのに苦労していますMySQLの場合。
違いはありますか?そうでない場合、これはリレーショナルデータベースのかなり一般的な動作パターンです(Oracleなどの他のデータベースでは、データベースと同じレベルではなく、データベースにスキーマが存在すると聞きました)。
ありがとう!
CREATE DATABASEは、指定された名前でデータベースを作成します。このステートメントを使用するには、データベースのCREATE権限が必要です。 CREATE SCHEMAは、MySQL 5.0.2以降のCREATE DATABASEの同義語です。
したがって、これらの2つの命令が同じことを行うことは正常に思えます。
Mysql documentation says:CREATE SCHEMAは、MySQL 5.0.2以降のCREATE DATABASEの同義語です。
これはすべて、80年代半ばのSQLのANSI標準に戻ります。
この標準には「CREATE SCHEMA」コマンドがあり、テーブル名とビュー名に複数の名前空間を導入するのに役立ちました。すべてのテーブルとビューは「スキーマ」内で作成されました。そのバージョンがテーブルとビューへのスキーマ間アクセスを定義しているかどうかはわかりませんが、そうだと思います。 AFAIR、(少なくとも当時は)実際にそれを実装した製品はありませんでした。そのコンセプト全体は実践よりも理論でした。
OTOH、ISTRこのバージョンの標準には「ユーザー」または「ユーザーの作成」コマンドの概念がなかったため、「ユーザー」の概念を使用する製品がありました(ユーザーはテーブルとビュー)に相当する「スキーマ」を実装します。
これは、システムが異なる領域です。
管理に関する限り、ここでは違いがあるので、これはあまり重要ではありません。
アプリケーションコードを見る限り、1つのアプリケーションが複数の名前空間からテーブルにアクセスする場合にのみ気にする必要があります。知る限り、すべてのシステムは構文 "。"をサポートしています。このため、名前空間がユーザー、 "スキーマ"、または "データベース"の名前空間であるかどうかは関係ありません。
厳密に言えば、MySQLではDatabaseとSchemaの違いは存在しません。
ただし、これは、SQL Serverなどの他のデータベースエンジンには当てはまりません。 SQLサーバー::
すべてのテーブルは、データベーススキーマと呼ばれるデータベース内のオブジェクトのグループに属します。コンテナまたは名前空間です( Querying Microsoft SQL Server 2012 )
既定では、SQL Serverのすべてのテーブルはdboと呼ばれる既定のスキーマに属します。特定のスキーマに割り当てられていないテーブルをクエリすると、次のようなことができます。
SELECT *
FROM your_table
次と同等です:
SELECT *
FROM dbo.your_table
現在、SQLサーバーでは異なるスキーマを作成できるため、同様の目的を共有するテーブルをグループ化できます。これは、データベースの整理に役立ちます。
たとえば、invoices、creditorders(およびその他の関連するテーブル)を使用して、salesというスキーマを作成できます。 (with sales)、およびlookupという別のスキーマ、countries、currencies、などのテーブルsubscriptiontypes(およびルックアップテーブルとして使用される他のテーブル)。
特定のドメインに割り当てられたテーブルは、スキーマ名がテーブル名の前に追加された状態でSQL Server Studio Managerに表示されます(デフォルトのdboスキーマに属するテーブルとまったく同じです)。
SQL Serverには特別なスキーマがあります。同じ本を引用するには:
組み込みのデータベーススキーマがいくつかあり、それらを削除または変更することはできません。
1)dbo、デフォルトのスキーマ。
2)guestはguestユーザーが使用できるオブジェクトを含みます( "guest user"はSQL Server lingoの特別な役割であり、デフォルトの高度に制限された権限があります)。めったに使われません。
3)INFORMATION_SCHEMA、情報スキーマビューで使用
4)sys、SQL Serverの内部使用専用に予約済み
スキーマはグループ化のためだけではありません。 MSDN で説明されているように、実際には、スキーマごとに異なる権限を異なるユーザーに与えることができます。
この方法で、上記のスキーマlookupをデータベース内の標準ユーザー(たとえば、SELECT
権限のみ)が利用できるようにすることができますが、supplierbankaccountdetailsはfinancialと呼ばれる別のスキーマに割り当てられ、グループaccounts
のユーザーにのみアクセスを許可することができます(ほんの一例、アイデアが得られます)。
最後に、同じ本をもう一度引用します。
同じではありませんDatabase SchemaとTable Schema。前者はテーブルの名前空間ですが、後者はテーブル定義を参照します
CREATE SCHEMAは、CREATE DATABASEの同義語です。 CREATE DATABASE構文
データベースはスキーマのコレクションであり、スキーマはテーブルのコレクションです。しかし、MySQLでは同じ方法で使用します。
したがって、MySQLの「データベース」とMySQLの「スキーマ」に違いはありません。これらは同じものの2つの名前-テーブルと他のDBオブジェクトの名前空間です。
Oracleのバックグラウンドを持つ人々:MySQL "データベース" a.k.a. MySQL "スキーマ"はOracleスキーマに対応します。 MySQLとOracleのCREATE SCHEMAコマンドの違いは、OracleではCREATE SCHEMAコマンドが実際にスキーマを作成するのではなく、テーブルとビューを移入することです。また、OracleのCREATE DATABASEコマンドは、MySQLの対応するコマンドとは非常に異なることを行います。