MySQL 'Schema erstellen' und 'Datenbank erstellen' - Gibt es einen Unterschied?

104

Wenn ich einen Peak in die information_schemaDatenbank nehme und die Metadaten für eines meiner Lieblingsprojekte anspreche, fällt es mir schwer zu verstehen, welche (wenn überhaupt) Unterschiede zwischen dem create schemaBefehl und dem create databaseBefehl für MySQL bestehen.

Gibt es Unterschiede? Wenn nicht, ist dies ein eher typisches Verhaltensmuster für relationale Datenbanken (ich habe gehört, dass für andere Datenbanken wie Oracle ein Schema in einer Datenbank vorhanden ist, anstatt sich auf derselben Ebene wie eine Datenbank zu befinden).

Vielen Dank!

Bob
quelle

Antworten:

139

Die Dokumentation von MySQL lautet :

CREATE DATABASE erstellt eine Datenbank mit dem angegebenen Namen. Um diese Anweisung verwenden zu können, benötigen Sie das CREATE-Privileg für die Datenbank. CREATE SCHEMA ist ein Synonym für CREATE DATABASE ab MySQL 5.0.2.

Es scheint also normal, dass diese beiden Anweisungen dasselbe tun.

Pascal MARTIN
quelle
1
Ausgezeichnet! Ich nahm an, dass das Schema Teil einer Datenbankinstanz ist. Vielen Dank!!
Asgs
27

In der MySQL-Dokumentation heißt es: CREATE SCHEMA ist ein Synonym für CREATE DATABASE ab MySQL 5.0.2.


Dies alles geht auf einen ANSI-Standard für SQL Mitte der 80er Jahre zurück.

Dieser Standard hatte den Befehl "CREATE SCHEMA" und diente dazu, mehrere Namensräume für Tabellen- und Ansichtsnamen einzuführen. Alle Tabellen und Ansichten wurden in einem "Schema" erstellt. Ich weiß nicht, ob diese Version einen schemaübergreifenden Zugriff auf Tabellen und Ansichten definiert hat, aber ich gehe davon aus, dass dies der Fall war. AFAIR, kein Produkt (zumindest damals) hat es wirklich umgesetzt, dieses ganze Konzept war mehr Theorie als Praxis.

OTOH, ISTR Diese Version des Standards hatte nicht das Konzept eines "Benutzers" oder eines "CREATE USER" -Befehls, daher gab es Produkte, die das Konzept eines "Benutzers" verwendeten (der dann seinen eigenen Namensraum für Tabellen und hatte Ansichten), um das Äquivalent von "Schema" zu implementieren.

Dies ist ein Bereich, in dem sich die Systeme unterscheiden.

Für die Verwaltung sollte dies nicht allzu wichtig sein, da es hier ohnehin Unterschiede gibt.

Wenn Sie sich den Anwendungscode ansehen, müssen Sie sich "nur" um Fälle kümmern, in denen eine Anwendung über mehrere Namensräume auf Tabellen zugreift. AFAIK, alle Systeme unterstützen eine Syntax ".", Und dabei sollte es keine Rolle spielen, ob der Namensraum der eines Benutzers, eines "Schemas" oder einer "Datenbank" ist.

Sadegh
quelle
@DerMike Ich scheine mich zu erinnern, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Es wäre richtig, einen Verweis auf die Originalquelle zu geben, aus der diese Antwort stammt: lists.mysql.com/mysql/211647
informatik01
@ informatik01 Es sei denn, Adinochestva ist ein Originalplakat.
FanaticD
SQL Server implementierte SCHEMA als eine Gruppe von Tabellen / Typen / .. in einer Datenbank
Gudgip
7

Genau genommen gibt es in MySql keinen Unterschied zwischen Datenbank und Schema .

Dies ist jedoch bei anderen Datenbankmodulen wie SQL Server nicht der Fall. In SQL Server:,

Jede Tabelle gehört zu einer Gruppe von Objekten in der Datenbank, die als Datenbankschema bezeichnet wird . Es ist ein Container oder Namespace ( Abfragen von Microsoft SQL Server 2012 )

Standardmäßig gehören alle Tabellen in SQL Server zu einem Standardschema namens dbo . Wenn Sie eine Tabelle abfragen, die keinem bestimmten Schema zugeordnet wurde, können Sie Folgendes tun:

SELECT *
FROM your_table

was äquivalent ist zu:

SELECT *
FROM dbo.your_table

Jetzt ermöglicht SQL Server die Erstellung verschiedener Schemata, sodass Sie Tabellen gruppieren können, die einen ähnlichen Zweck haben. Das hilft, die Datenbank zu organisieren.

Sie können beispielsweise ein Schema namens " Verkauf" mit Tabellen wie Rechnungen , Gläubigern (und anderen mit Verkäufen verbundenen) und ein anderes Schema namens " Suche" mit Tabellen wie Ländern , Währungen , Abonnementtypen (und jeder anderen Tabelle, die als Look verwendet wird) erstellen Tisch).

Die Tabellen, die einer bestimmten Domäne zugeordnet sind, werden in SQL Server Studio Manager mit dem Schemanamen vor dem Tabellennamen angezeigt (genau wie die Tabellen, die zum Standard- Dbo- Schema gehören).

In SQL Server gibt es spezielle Schemas. Um dasselbe Buch zu zitieren:

Es gibt mehrere integrierte Datenbankschemata, die nicht gelöscht oder geändert werden können:

1) dbo , das Standardschema.

2) Gast enthält Objekte, die einem Gastbenutzer zur Verfügung stehen ("Gastbenutzer" ist eine spezielle Rolle in der SQL Server-Umgangssprache mit einigen Standard- und stark eingeschränkten Berechtigungen). Kaum benutzt.

3) INFORMATION_SCHEMA , das von den Informationsschemaansichten verwendet wird

4) sys , ausschließlich für den internen Gebrauch von SQL Server reserviert

Schemata dienen nicht nur der Gruppierung. Es ist tatsächlich möglich, verschiedenen Benutzern unterschiedliche Berechtigungen für jedes Schema zu erteilen, wie in MSDN beschrieben .

Auf diese Weise könnte die oben erwähnte Schemasuche jedem Standardbenutzer in der Datenbank zur Verfügung gestellt werden (z. B. SELECTnur Berechtigungen), während eine Tabelle mit dem Namen " Lieferantenbankkontodetails" in einem anderen Schema namens " Finanziell" zugewiesen werden kann , um nur den Benutzern in "Zugriff" zu gewähren die Gruppe accounts(nur ein Beispiel, Sie bekommen die Idee).

Zum Schluss noch einmal das gleiche Buch zitieren:

Es ist nicht dasselbe Datenbankschema und Tabellenschema . Ersteres ist der Namespace einer Tabelle, während letzteres auf die Tabellendefinition verweist

Nicolas
quelle
6

CREATE SCHEMA ist ein Synonym für CREATE DATABASE. CREATE DATABASE Syntax

Sergey Olontsev
quelle
5

Die Datenbank ist eine Sammlung von Schemata und das Schema ist eine Sammlung von Tabellen. Aber in MySQL wird es genauso verwendet.

Arun Raja
quelle
1

Es gibt also keinen Unterschied zwischen MySQL "Datenbank" und MySQL "Schema": Dies sind zwei Namen für dasselbe - ein Namespace für Tabellen und andere DB-Objekte.

Für Personen mit Oracle-Hintergrund: Die MySQL "Datenbank", auch bekannt als MySQL "Schema", entspricht dem Oracle-Schema. Der Unterschied zwischen MySQL- und Oracle CREATE SCHEMA-Befehlen besteht darin, dass der CREATE SCHEMA-Befehl in Oracle kein Schema erstellt, sondern es mit Tabellen und Ansichten füllt. Und der Befehl CREATE DATABASE von Oracle macht etwas ganz anderes als sein MySQL-Gegenstück.

Oleg Khaykin
quelle