MS SQLとMySQLのデータベース用語の違いは何ですか?
MySQLインスタンスに複数のデータベースを含めることはできますか?異なるスキーマしか作成できないようです。ただし、SQLコマンドはcreate database
。
MS SQLでは、複数のデータベースを作成できます。各データベースにはデフォルトのスキーマdboがありますか?...しかし、データベース内の複数のスキーマはまだ可能ですか?
この link から、MS SQLスキーマがユーザーに結び付けられなくなっていることがわかります。関連する引用は次のとおりです。
スキーマの動作はSQL Server 2005で変更されました。スキーマはデータベースユーザーと同等ではなくなりました。各スキーマは、それを作成したデータベースユーザーとは独立して存在する個別の名前空間になりました。言い換えれば、スキーマはオブジェクトのコンテナにすぎません。スキーマはどのユーザーでも所有でき、所有権は譲渡できます。
MySQLでは、データベースとスキーマはまったく同じものです。コマンドでWordを交換することもできます。つまり、CREATE DATABASEにはCREATE SCHEMAという同義語があります。
MySQLは複数のデータベース(スキーマ)をサポートし、MS SQLは複数のデータベースと複数のスキーマをサポートします。
一般に、次の記事 Wikipediaで が役に立つことがわかりました。
記事の最後には次のものがあります。
SQL仕様では、「SQLスキーマ」が何であるかが明確になっています。ただし、さまざまなデータベースがそれを誤って実装します。この混乱を悪化させるために、機能は、誤って実装された場合、親データベースの機能と重複する可能性があります。 SQLスキーマは、データベース内の単なる名前空間であり、この名前空間内のものは、メンバー演算子ドット「。」を使用してアドレス指定されます。これは、すべての実装の中で普遍的であるようです。真の完全な(データベース、スキーマ、およびテーブル)修飾クエリは次のように例示されます:
select * from database.schema.table
さて、問題は、スキーマとデータベースの両方を使用して、1つのテーブル
foo
を別の名前付きテーブルfoo
から分離できることです。以下は擬似コードです:select * from db1.foo
vs.select * from db2.foo
(dbとテーブルの間に明示的なスキーマはありません)select * from [db1.]default.foo
vs.select * from [db1.]alternate.foo
(明示的なdbプレフィックスなし)発生する問題は、以前のMySQLユーザーが1つのプロジェクトに対して複数のデータベースを作成することです。この文脈では、MySQLデータベースの機能はPostgresスキーマに類似しています。Postgresには、MySQLにある既製のクロスデータベース機能がないためです。逆に、Postgresはクロステーブル、クロススキーマを実装する仕様をさらに適用し、その後、将来のクロスデータベース機能のための余地を残しています。背後でのMySQLエイリアス、データベースを使用したスキーマ(スキーマの作成、データベースの作成など)は類似しています。したがって、MySQLはクロステーブル機能を実装し、スキーマ機能を完全にスキップし、データベースの実装に同様の機能を提供したと言えます。要約すると、Postgresはスキーマを完全にサポートしていますが、MySQLがデータベースに対して持ついくつかの機能が欠けていますが、MySQLは真のスキーマをサポートしようとさえしていません。
MS SQLの「スキーマ」と言うことは、「所有者」を意味すると考えています。
私の理解から、MySQLであなたがするとき
SELECT * from world.city;
このクエリは、worldデータベースからテーブルcityを選択しています。
MsSQLでは、以下を行う必要があります
SELECT * from world.dbo.city;
ここで、「dbo」はテーブルのデフォルトの所有者です。
簡単に入力するには、デフォルトのデータベースを定義します
USE world
SELECT * from city;
MySQLでは、テーブルの所有者を宣言する方法はありません。すなわち。 「dbo」。
MS SQLは、それぞれ1から多数のスキーマを持つ複数のデータベースを完全にサポートします。dboは、後方互換性のためのデフォルトに過ぎません。