MySQLの「スキーマの作成」と「データベースの作成」-違いはありますか


104

information_schemaデータベースにピークをとり、私のペットプロジェクトの1つのメタデータにピークを設定するcreate schemaと、create databaseコマンドとMySQLのコマンドの違い(ある場合)が何かを理解するのに苦労します。

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

ありがとう!

回答:


140

MySQLドキュメントによると

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

したがって、これらの2つの命令が同じことを行うのは正常なようです。


1
優れた!スキーマはデータベースインスタンスの一部であると想定しました。どうもありがとう!!
2016年

27

Mysqlドキュメントは言う:CREATE SCHEMAは MySQL 5.0.2以降のCREATE DATABASEの同義語です


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

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

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

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

行政に関して言えば、ここには違いがあるので、これはあまり問題になりません。

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


@DerMike思い出そう、internetslang.com
ISTR

2
この回答が得られた元のソースへの参照を指定するのが正しいでしょう。lists.mysql.com
informatik01

@ informatik01 Adinochestvaがオリジナルのポスターでない限り。
FanaticD 2015年

SQL Serverは、データベース内のテーブル/タイプ/ ..のグループとしてSCHEMAを実装しました
Gudgip

7

厳密に言えば、データベーススキーマの違いはMySqlには存在しません。

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

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

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

SELECT *
FROM your_table

これは次と同等です:

SELECT *
FROM dbo.your_table

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

たとえば、あなたが呼ばれるスキーマを作成することができ、販売のようなテーブルと、請求書creditorders(および販売に関連する他)、およびと呼ばれる別のスキーマのルックアップ、のようなテーブルを持つ通貨subscriptiontypes見た目として使用(および他のテーブルをアップテーブル)。

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

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

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

1)デフォルトのスキーマであるdbo

2)ゲストにゲストユーザーが利用できるオブジェクトが含まれています(「guest user」は、SQL Serverの専門用語における特別な役割であり、いくつかのデフォルトのアクセス許可と非常に制限されたアクセス許可があります)。ほとんど使われません。

3)INFORMATION_SCHEMA情報スキーマビューで使用される

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

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

このようにすると、上記のスキーマ検索をデータベース内の標準ユーザー(たとえば、SELECT権限のみ)が利用できるようになりますが、supplierbankaccountdetailsというテーブルは、Financialと呼ばれる別のスキーマに割り当てられ、グループaccounts(ほんの一例です、あなたはアイデアを得ます)。

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

データベーススキーマテーブルスキーマは同じではありません。前者はテーブルの名前空間ですが、後者はテーブル定義を指します



5

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


1

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

Oracleの背景を持つ人々:MySQL "データベース"別名MySQL "スキーマ"はOracleスキーマに対応します。MySQLとOracleのCREATE SCHEMAコマンドの違いは、OracleではCREATE SCHEMAコマンドは実際にはスキーマを作成せず、テーブルとビューを設定することです。また、OracleのCREATE DATABASEコマンドは、対応するMySQLのものとは非常に異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.