回答:
CREATE DATABASEは、指定された名前でデータベースを作成します。このステートメントを使用するには、データベースに対するCREATE特権が必要です。CREATE SCHEMAはMySQL 5.0.2以降のCREATE DATABASEの同義語です。
したがって、これらの2つの命令が同じことを行うのは正常なようです。
Mysqlドキュメントは言う:CREATE SCHEMAは MySQL 5.0.2以降のCREATE DATABASEの同義語です。
これはすべて、80年代半ばのSQLのANSI標準に戻ります。
その標準には「CREATE SCHEMA」コマンドがあり、テーブルとビューの名前に複数の名前空間を導入するのに役立ちました。すべてのテーブルとビューは「スキーマ」内に作成されました。そのバージョンがテーブルとビューへのクロススキーマアクセスを定義したかどうかはわかりませんが、そうだったと思います。AFAIR、(少なくとも当時)実際にそれを実装した製品はなく、その概念全体は実践よりも理論的でした。
OTOH、ISTRこのバージョンの標準には、「ユーザー」または「CREATE USER」コマンドの概念がなかったため、「ユーザー」の概念を使用する製品がありました(そのユーザーには、テーブルとビュー)「スキーマ」に相当するものを実装します。
これは、システムが異なる領域です。
行政に関して言えば、ここには違いがあるので、これはあまり問題になりません。
アプリケーションコードを見る限り、1つのアプリケーションが複数の名前空間からテーブルにアクセスする場合にのみ注意する必要があります。私の知る限り、すべてのシステムは構文 "。"をサポートしており、このために、名前空間がユーザー、 "スキーマ"、または "データベース"のどれであるかは問題ではありません。
厳密に言えば、データベースとスキーマの違いは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
(ほんの一例です、あなたはアイデアを得ます)。
最後に、同じ本をもう一度引用します。
データベーススキーマとテーブルスキーマは同じではありません。前者はテーブルの名前空間ですが、後者はテーブル定義を指します
CREATE SCHEMAはCREATE DATABASEの同義語です。CREATE DATABASE構文
したがって、MySQLの「データベース」とMySQLの「スキーマ」の間に違いはありません。これらは、同じものの2つの名前、つまりテーブルと他のDBオブジェクトの名前空間です。
Oracleの背景を持つ人々:MySQL "データベース"別名MySQL "スキーマ"はOracleスキーマに対応します。MySQLとOracleのCREATE SCHEMAコマンドの違いは、OracleではCREATE SCHEMAコマンドは実際にはスキーマを作成せず、テーブルとビューを設定することです。また、OracleのCREATE DATABASEコマンドは、対応するMySQLのものとは非常に異なります。