2009-08-02 9 views
81

Nehmen Sie einen Höhepunkt in der information_schema Datenbank und Höhepunkt an der Metadaten für eines meiner Lieblingsprojekte, ich habe eine harte Zeit zu verstehen, was (wenn irgendwelche) Unterschiede gibt es zwischen dem create schema Befehl und dem Befehl für MySQL.MySQL 'create schema' und 'create database' - Gibt es einen Unterschied

Gibt es Unterschiede? Wenn nicht, ist dies ein ziemlich 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 der gleichen Ebene wie eine Datenbank ist).

Danke!

Antwort

111

Die documentation of MySQL says:

CREATE DATABASE erstellt eine Datenbank mit dem angegebenen Namen. Um diese -Anweisung zu verwenden, benötigen Sie die Berechtigung CREATE 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 das Gleiche tun.

+1

Ausgezeichnet! Ich habe angenommen, dass das Schema Teil einer Datenbankinstanz ist. Vielen Dank!! – asgs

24

Mysql documentation sagt: CREATE SCHEMA ist ein Synonym für CREATE DATABASE ab MySQL 5.0.2.


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

Dieser Standard hatte einen "CREATE SCHEMA" -Befehl 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 einige schemataübergreifenden Zugriff auf Tabellen und Ansichten definiert, aber ich nehme an, dass es getan hat. AFAIR, kein Produkt (zumindest damals) wirklich umgesetzt, das ganze Konzept war mehr Theorie als Praxis.

OTOH, ISTR diese Version des Standards nicht das Konzept eines „user“ hatte oder ein „CREATE USER“ -Befehl, so Produkte waren, die das Konzept einer „user“ verwendet (der sich dann hatte eigener Namespace für Tabellen und Views), um deren Äquivalent von "schema" zu implementieren.

In diesem Bereich unterscheiden sich die Systeme.

Für die Verwaltung sollte das nicht so viel bedeuten, weil hier sowieso Unterschiede bestehen.

Soweit Sie Anwendungscode betrachten, müssen Sie "nur" Fälle kümmern, in denen eine Anwendung auf Tabellen aus mehreren Namensräumen zugreift. AFAIK, alle Systeme unterstützen eine Syntax ".", und dafür ist es egal, ob der Namespace der eines Benutzers ist, ein "Schema" oder eine "Datenbank".

+2

Was ist ISTR? – DerMike

+0

@DerMike Ich schein mich erinnern, http://www.internetslang.com/ISTR-meaning-definition.asp – reevesy

+2

Es wäre richtig, einen Verweis auf die ursprüngliche Quelle zu geben, von wo diese Antwort genommen wurde: http: // lists.mysql.com/mysql/211647 – informatik01

4

Datenbank ist eine Sammlung von Schemas und Schema ist eine Sammlung von Tabellen.Aber in MySQL verwenden sie es auf die gleiche Weise.

4

Streng genommen ist der Unterschied zwischen Datenbank und Schema ist inexisting in MySql.

Dies ist jedoch in anderen Datenbank-Engines wie SQL Server nicht der Fall. In SQL Server :,

Jeder Tisch gehört zu einer Gruppierung von Objekten in der Datenbank Datenbankschema genannt. Es ist ein Container oder ein Namespace (Querying Microsoft SQL Server 2012)

standardmäßig alle Tabellen in SQL Server zu einem Standardschema dbo genannt gehören. Wenn Sie eine Tabelle abfragen, die nicht auf ein bestimmtes Schema zugewiesen hat, können Sie so etwas wie tun:

SELECT * 
FROM your_table 

, die gleich ist:

SELECT * 
FROM dbo.your_table 

Nun ermöglicht SQL Server die Erstellung von verschiedenen Schema, das Ihnen die Möglichkeit gibt, Tabellen zu gruppieren, die einen ähnlichen Zweck haben. Das hilft, die Datenbank zu organisieren.

Zum Beispiel können Sie ein Schema namens Umsatz, mit Tabellen wie Rechnungen, creditorders (und anderen damit verbundenen Umsatz) erstellen, und ein anderes Schema Lookup, mit Tabellen wie genannt Länder, Währungen, Subskriptionstypen (und jede andere Tabelle als Nachschlagetabelle verwendet).

Die Tabellen, die einer bestimmten Domäne zugeordnet sind, werden im SQL Server Studio Manager mit dem Schemanamen vor dem Tabellennamen angezeigt (genau wie die Tabellen, die zum Standardschema dbo gehören).

Es gibt spezielle Schemas in SQL Server. Um es mit dem gleichen Buch:

Es gibt mehrere integrierten Datenbank-Schemata, und sie können nicht gelöscht oder geändert werden:

1) dbo, das Standardschema.

2) Gast enthält Objekte zur Verfügung zu einem Gastbenutzer („Gastbenutzer“ ist eine spezielle Rolle in SQL Server Kauderwelsch, mit einigem Standard und eingeschränkten Berechtigungen hoch). Kaum benutzt.

3) INFORMATION_SCHEMA, durch die Schemaansichten

Informationen verwendet

4) sys, für SQL Server die interne Verwendung reserviert ausschließlich

Schemen für die Gruppierung nicht nur. Es ist tatsächlich möglich, verschiedenen Benutzern unterschiedliche Berechtigungen für jedes Schema zu geben, wie beschrieben unter MSDN.

diese Art und Weise das Schema Lookup oben erwähnt könnte in der Datenbank zu jedem Standard-Benutzer zur Verfügung gestellt werden (zB SELECT Berechtigungen nur), während eine Tabelle supplierbankaccountdetails genannt in einem anderen Schema zugewiesen werden können Finanz genannt, und geben Sie nur Zugriff auf die Benutzer in der Gruppe accounts (nur ein Beispiel, Sie bekommen die Idee).

Schließlich, und zitiert das gleiche Buch wieder:

Es ist nicht das gleiche Datenbank-Schema und Tabellenschema. Ersteres ist der Namensraum einer Tabelle, letzteres bezieht sich auf die Tabellendefinition