it-swarm.com.de

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

Ein Peak in die information_schema-Datenbank und einen Peak bei den Metadaten für eines meiner Pet-Projekte. Ich habe Schwierigkeiten, zu verstehen, welche Unterschiede zwischen dem create schema-Befehl und dem create database-Befehl 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 existiert und nicht auf derselben Ebene wie eine Datenbank ist).

Vielen Dank!

90
Bob

Die Dokumentation von MySQL sagt

CREATE DATABASE erstellt eine Datenbank mit dem angegebenen Namen. So verwenden Sie diese Anweisung benötigen Sie das CREATE Privileg für die Datenbank. ERSTELLEN SCHEMA ist ein Synonym für CREATE DATENBANK ab MySQL 5.0.2.

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

124
Pascal MARTIN

MySQL-Dokumentation sagt: 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 der Einführung mehrerer Namensräume für Tabellen- und Sichtnamen. Alle Tabellen und Ansichten wurden im Rahmen eines "Schemas" erstellt. Ich weiß nicht, ob diese Version definiert wurde. Einige Schemata haben Zugriff auf Tabellen und Ansichten, aber ich gehe davon aus, dass es getan hat. AFAIR, kein Produkt (zumindest damals) hat es wirklich implementiert, das Ganze. Konzept war mehr Theorie als Praxis.

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

In diesem Bereich unterscheiden sich die Systeme.

Was die Verwaltung anbelangt, sollte dies nicht zu viel ausmachen, denn hier gibt es sowieso Unterschiede.

Wenn Sie sich Anwendungscode ansehen, müssen Sie sich "nur" um Fälle kümmern, in denen eine Anwendung auf Tabellen aus mehreren Namensräumen zugreift. AFAIK, alle Systeme unterstützen eine Syntax ".", Und dabei sollte es keine Rolle spielen, ob der Namensraum ein Benutzer, ein "Schema" oder eine "Datenbank" ist.

27
Sadegh

Streng genommen ist der Unterschied zwischen Database und Schema in MySql nicht vorhanden. 

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 mit dem Namen Datenbankschema. Es handelt sich um einen Container oder Namespace ( Abfragen von Microsoft SQL Server 2012 )

Standardmäßig gehören alle Tabellen in SQL Server zu einem Standardschema mit dem Namen 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

Mit dem SQL-Server können jetzt verschiedene Schemas erstellt werden. Dadurch haben Sie die Möglichkeit, Tabellen mit einem ähnlichen Zweck zu gruppieren. Das hilft, die Datenbank zu organisieren. 

Sie können beispielsweise ein Schema mit dem Namen sales erstellen, mit Tabellen wie Rechnungen, Kreditbestellungen (und einem anderen mit dem Verkauf verbundenen) und ein anderes Schema mit dem Namen lookup, mit Tabellen wie Länder, Währungen, Abonnementtypen (und jeder anderen Tabelle, die als Nachschlagetabelle verwendet wird). 

Die Tabellen, die einer bestimmten Domäne zugeordnet sind, werden in SQL Server Studio Manager angezeigt, wobei der Name des Tabellennamens vor dem Tabellennamen steht (genau den Tabellen, die zum Standardschema dbo gehören).

Es gibt spezielle Schemas in SQL Server. Um dasselbe Buch zu zitieren: 

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

1) dbo, das Standardschema.

2) guest enthält Objekte, die einem guest userzur Verfügung stehen ("guest user" ist eine besondere Rolle in der SQL Server-Sprache, mit einigen Standard- und stark eingeschränkten Berechtigungen). Kaum benutzt.

3) INFORMATION_SCHEMA, wird von den Informationsschemaansichten verwendet

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

Schemas dienen nicht nur zur Gruppierung. Es ist tatsächlich möglich, für jedes Schema unterschiedliche Berechtigungen für verschiedene Benutzer zu vergeben, wie in MSDN beschrieben. 

Auf diese Weise könnte das oben erwähnte Schema lookup für jeden Standardbenutzer in der Datenbank verfügbar gemacht werden (z. B. nur SELECT-Berechtigungen), während eine Tabelle mit dem Namen supplierbankaccountdetails einem anderen Schema zugeordnet werden kann financial und um nur den Benutzern der Gruppe accounts Zugriff zu gewähren (nur ein Beispiel, Sie bekommen die Idee).

Zum Schluss noch einmal dasselbe Buch:

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

7
Nicolas

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

6
Sergey Olontsev

Datenbank ist eine Sammlung von Schemata und ein Schema ist eine Sammlung von Tabellen. In MySQL verwenden sie es jedoch genauso. 

4
Arun Raja

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

Für Personen mit Oracle-Hintergrund: Die MySQL-Datenbank "aka MySQL-Schema" entspricht dem Oracle-Schema . Der Unterschied zwischen MySQL- und Oracle-Befehlen CREATE SCHEMA besteht darin, dass der Befehl CREATE SCHEMA in Oracle nicht wirklich erstellt wird ein Schema, füllt es jedoch eher mit Tabellen und Ansichten. Der CREATE DATABASE-Befehl von Oracle macht etwas anderes als sein Gegenstück in MySQL.

0
Oleg Khaykin