Unterschied zwischen Schema / Datenbank in MySQL

290

Gibt es einen Unterschied zwischen einem Schema und einer Datenbank in MySQL? In SQL Server ist eine Datenbank ein Container höherer Ebene in Bezug auf ein Schema.

Ich lese das Create Schemaund Create Databasemache im Wesentlichen dasselbe in MySQL, was mich glauben lässt, dass Schemata und Datenbanken unterschiedliche Wörter für dieselben Objekte sind.

Lloyd Banks
quelle
Eigentlich würde ich sagen, schemaist besser als database, da MySQL eine Art Datenbank ist und mehrere enthält database, und manchmal auch useeine database, was dazu führt, dass viele Suchanfragen das Ziel verfehlen.
theaws.blog

Antworten:

335

Wie im MySQL-Glossar definiert :

In MySQL ist ein Schema physisch gleichbedeutend mit einer Datenbank . Sie können das Schlüsselwort SCHEMAanstelle von DATABASEin der MySQL SQL-Syntax ersetzen , z. B. CREATE SCHEMAanstelle von CREATE DATABASE.

Einige andere Datenbankprodukte unterscheiden sich. Im Oracle Database-Produkt stellt ein Schema beispielsweise nur einen Teil einer Datenbank dar: die Tabellen und andere Objekte, die einem einzelnen Benutzer gehören.

eggyal
quelle
74
Ich denke, "einige andere Datenbankprodukte" sind wirklich ein Euphemismus für so ziemlich jede andere Datenbank (vielleicht außer SQLite, aber das ist verständlich).
Stefan Steiger
5
Es ist interessant, ein Schema synonym mit einer Datenbank zu machen - ich hatte es immer mit Benutzerobjekten verknüpft. Und eine freundliche Erwähnung von SQLServer, die das Benutzer- / Schemakonzept trennte und eine Menge Flexibilität und einige interessante Möglichkeiten für dynamische Abfragen ermöglichte.
Gerard ONeill
Das Ärgerliche an der Definition von "Schema" als Gruppierung von Datenbankobjekten ist, dass es die ältere Bedeutung des Wortes überlastet, z . B. en.wikipedia.org/wiki/Database_schema .
Mark E. Haase
1
@mehaase beide sind die alte Bedeutung des Wortes. Oracle hatte Schemata bereits vor SQL3 (1999), obwohl es sie so behandelte, als würden andere Datenbanken vollständige Datenbanken betreten. Tatsächlich nennt Oracle "Datenbank", was andere als Server oder Serverinstanz bezeichnen - verschiedene Binärdateien, verschiedene ausführbare Dateien, verschiedene Ports.
Panagiotis Kanavos
61

Hängt vom Datenbankserver ab. MySQList mir egal, es ist im Grunde das gleiche.

Oracle,, DB2und andere Datenbanklösungen auf Unternehmensebene unterscheiden. Normalerweise ist ein Schema eine Sammlung von Tabellen und eine Datenbank ist eine Sammlung von Schemata.

user2631022
quelle
6
Sogar Microsoft SQL Server hat eine sehr ähnliche Unterscheidung wie Oracleund DB2für diesen Fall.
RBT
2
In MySQL sind "Datenbank" und "Schema" nicht grundsätzlich dasselbe. es ist genau das gleiche (zum Beispiel create databaseund create schemasind Synonyme). In Oracle ist Schema gleichbedeutend mit Benutzer (genauer gesagt ist Schema eine Liste aller unter einem Benutzer erstellten Objekte). MSSQL unterscheidet alle drei (und als Ergebnis muss beim Zugriff auf eine Tabelle aus einer anderen Datenbank der Name sowohl durch die Datenbank als auch durch das Schema qualifiziert werden, z. B. database1.dbo.table2)
Mike Rosoft
17

Refering zu MySql Dokumentation ,

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.

Akash KC
quelle
7

PostgreSQL unterstützt Schemas, eine Teilmenge einer Datenbank: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Eine Datenbank enthält ein oder mehrere benannte Schemas, die wiederum Tabellen enthalten. Schemata enthalten auch andere Arten von benannten Objekten, einschließlich Datentypen, Funktionen und Operatoren. Der gleiche Objektname kann ohne Konflikte in verschiedenen Schemas verwendet werden. Beispielsweise können sowohl schema1 als auch myschema Tabellen mit dem Namen mytable enthalten. Im Gegensatz zu Datenbanken sind Schemas nicht starr voneinander getrennt: Ein Benutzer kann auf Objekte in jedem der Schemas in der Datenbank zugreifen, mit denen er verbunden ist, sofern er dazu berechtigt ist.

Schemas sind analog zu Verzeichnissen auf Betriebssystemebene, außer dass Schemas nicht verschachtelt werden können.

Meiner bescheidenen Meinung nach ist MySQL keine Referenzdatenbank. Sie sollten MySQL niemals zur Erklärung zitieren. MySQL implementiert nicht standardmäßiges SQL und behauptet manchmal Funktionen, die es nicht unterstützt. In MySQL erstellt das CREATE-Schema beispielsweise nur eine DATABASE. Es ist wirklich irreführend Benutzer.

Diese Art von Vokabeln wird von DBAs "MySQLism" genannt.

Jean-Michel P.
quelle
2
Und dann gibt es "Schemata", um die Verwirrung für Anfänger zu
erhöhen
@ Zeni Was genau ist ein Schema in MySQL? Alles, was ich finden konnte, sind Verweise auf die Schematabelle information_schema, aber keine
präzise
@ Alf47 "Schemata" ist nur die Pluralform des Wortes "Schema". "Schemas" ist auch akzeptabel, aber nicht so schick :)
jobo3208
6

im MySQL- Schema ist Synonym für Datenbank . Es ist ziemlich verwirrend für Anfänger, die zu MySQL springen und am ersten Tag das Wortschema finden , also keine Sorge, da beide gleich sind.

Wenn Sie MySQL zum ersten Mal starten, müssen Sie eine Datenbank (wie jedes andere Datenbanksystem) erstellen, mit der Sie arbeiten können, damit Sie SCHEMA ERSTELLEN können, das nichts anderes als CREATE DATABASE ist

In einigen anderen Datenbanksystemen stellt das Schema einen Teil der Datenbank oder eine Sammlung von Tabellen dar, und die Sammlung des Schemas ist eine Datenbank.

Riz
quelle
3

Ja, diese Begriffe werden in Bezug auf MySQL synonym verwendet. Oft werden Sie jedoch hören, dass Personen den gesamten Datenbankserver unangemessen als Datenbank bezeichnen.

Mike Brant
quelle
0

Microsoft SQL Server-Schemas beziehen sich beispielsweise auf einen einzelnen Benutzer und sind eine weitere Ebene eines Containers in der Reihenfolge, in der Server, Datenbank, Schema, Tabellen und Objekte angegeben werden.

Wenn Sie beispielsweise dbo.table_a aktualisieren möchten und die Syntax nicht vollständig qualifiziert ist, z. B. UPDATE table.a, kann das DBMS nicht entscheiden, die beabsichtigte Tabelle zu verwenden. Im Wesentlichen verwendet das DBMS standardmäßig myuser.table_a

EliD
quelle
Schema ist im Besitz von einem einzigen Benutzer. Standardmäßig verwendet ein in der Datenbank erstellter Benutzer das dbo-Schema als Standardschema. Das Standardschema, das für eine nicht vollständig qualifizierte Tabellenreferenz verwendet wird, ist das für diesen Benutzer festgelegte.
Gerard ONeill
In älteren Versionen von SQL Server würde das Löschen eines Benutzers das damit verbundene Schema unbrauchbar machen. Heutzutage ist die Zuordnung zwischen Benutzer und Schema weniger streng. Es wird auch als bewährte Methode angesehen, dem Eigentümer der Datenbank und aller Schemas ein einziges gefälschtes Konto zu erstellen.
Jonathan Allen