Ändern des Schemas mit MySQL (Ändern des Schemas mit MySQL), Lektion, Seite 722373
https://www.purl.org/stefan_ram/pub/schema_aendern_mysql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Erzeugen und Einstellen von Schemas mit MySQL 

Eine Datenbankschema, kurz: Schema, ist ein benanntes Verzeichnis von Tabellenvariablen, es wird manchmal auch als „Datenbank“ (“database ”) bezeichnet. Das zugrundeliegende griechische Wort σχήμα bedeutet soviel wie „Form“ oder „Plan“.

Eine mögliche Aussprache des englischen Wortes “schema(s) ” ist /'skiːmə(z)/. Auf deutsch: „Das Schema“, Genitiv: „des Schemas“, Plural: „die Schemas“ und „Schemata“.

Verschiedene einfache Datenbanksysteme enthalten nur ein einziges Schema. Bei Verwendung solcher einfacher Datenbanksysteme entfallen die hier vorgestellten Kommandos.

Ein Schema namens »S« löschen

Durch das Löschen eines Schemas gehen alle darin enthaltenen Tabellen und alle in diesen Tabellen enthaltenen Informationen verloren.

Das folgende Kommando verlangt, das Schema mit dem Namen »S« zu löschen.

Konsole (MySQL, S99:F381, S03:F381)
DROP SCHEMA S;
ERROR 1008 (HY000): Can't drop database 's'; database doesn't exist
Aussprache
drop drɑp
Übersetzung der Fehlermeldung
FEHLER 1008 (HY000): Datenbank 's' kann nicht geloescht werden; Datenbank existiert nicht

Hier nehmen wir an, daß ein Schema mit dem Namen »S« bei der Eingabe des Kommandos nicht existiert. Es kann dann auch nicht gelöscht werden, und es erscheint eine entsprechende Fehlermeldung.

Das Löschen ist in SQL  im allgemeinen ein sofort (ohne Rückfragen) vollzogenes Kommando, das im allgemeinen nicht  rückgängig gemacht werden kann!

Es ist oft auf einfache Weise möglich, umfangreiche Datenbestände durch SQL -Kommandos zu beschädigen. Daher sollten bei Datenbanken mit wichtigen Informationen vorsichtig gearbeitet werden. Experimentelle Kommandos und Übungskommandos sollten nicht auf Datenbanksystem mit wichtigen Daten erprobt werden, sondern nur auf speziellen Datenkbanksystemen mit Daten, deren Verlust oder Beschädigung nicht zu Problemen führt.

Ein Schema namens »S« anlegen

Durch das folgende Kommando wird ein Schema namens »S« angelegt.

Konsole (MySQL, S99:F171, S03:F171)
CREATE SCHEMA S;
Query OK, 1 row affected (0.00 sec)
Übersetzung der Meldung
Abfrage in Ordnung, eine Zeile betroffen (0.00 Sek)

create  kriˈeɪt

Ein Schema ist eine Voraussetzung für das spätere Anlegen von Tabellen, da alle Tabellen in einem Schema enthalten sein müssen.

Bezeichner in SQL  (vereinfacht)

Ein Bezeichner ist eine Folge von mindestens einem Buchstaben (»A«, »B«, »C«, »D«, »E«, »F«, »G«, »H«, »I«, »J«, »K«, »L«, »M«, »N«, »O«, »P«, »Q«, »R«, »S«, »T«, »U«, »V«, »W«, »X«, »Y« und »Z«), und ab der zweiten Position sind auch Ziffern (»0«, »1«, »2«, »3«, »4«, »5«, »6«, »7«, »8« und »9«) erlaubt.

Bestimmte Wörter (wie beispielsweise »CREATE« oder »TABLE«) sind für spezielle Zwecke reserviert und gelten daher nicht  als Bezeichner.

Wenn ein Benutzer einer Datenbank ein neues Schema anlegt, so kann er diesem einen Namen verleihen. Jener Name muß ein Bezeichner sein.

Groß- und Kleinschreibung ist bei Bezeichnern nicht  signifikant. (Das heißt, daß ein klein geschriebener Bezeichner später auch groß geschrieben werden kann, um sich auf dieselbe Sache zu beziehen.)

Während die Schlüsselwörter in Entry-Level SQL 1992  auch klein geschrieben werden dürfen, müssen Bezeichner (wie beispielsweise Namen von Schemas oder Tabellen) dort ganz mit Versalien (großen Buchstaben) geschrieben werden. In MySQL  wird dies aber nicht verlangt.

Siehe auch: Abschnitt 5.2 der ISO/IEC 9075.

Bezeichner in MySQL  (vereinfacht)

Für Schema-Namen in MySQL  gilt das zuvor Gesagte, mit der folgenden Änderung: Ein Schema-Name darf auch Grundstriche »_« und Dollarzeichen »$« enthalten, außerdem darf er auch mit einer Ziffer beginnen, aber nicht ausschließlich aus Ziffern bestehen.

In MySQL  ist die Groß- und Kleinschreibung in Bezeichnern (Namen) signifikant (unterscheidend), wenn sie es in dem Dateisystem, in welchem die Daten abgespeichert werden, ist. Unter Microsoft® Windows  ist sie also nicht signifikant. (Siehe http://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html.) Es ist empfehlenswert, eine einheitliche Schreibweise festzulegen und konsequent zu verwenden, beispielsweise solche Namen immer vollständig und durchgängig groß zu schreiben.

Siehe auch: http://dev.mysql.com/doc/refman/5.7/en/identifiers.html.

Ein Schema namens »S« als aktuelles Schema einstellen

Durch das Einstellen eines Schemas als aktuelles Schema beziehen sich die folgenden Kommandos auf diese Schema. (Kommandos, welche dem folgen können, werden etwas später vorgestellt werden.) Das Anlegen eines Tabellenspeichers erfolgt beispielsweise unter bestimmten Umständen in dem aktuellen Schema.

Konsole — kein Standard-SQL , kein MySQL-Serverkommando
USE S
Database changed
Übersetzung der Meldung
Datenbank verändert

Aussprache: “use ”, Verb: /juz/ (Substantiv: /jus/).

Dieses Kommando ist ein Kommando des MySQL-Monitors (des Klienten), nicht des MySQL-Servers. Es braucht daher auch nicht mit einem Semikolon abgeschlossen zu werden, wenn es auf einer Zeile für sich steht.

Diese mit »USE« vorgenommene Einstellung wirkt sich nur  auf den Klienten und nur  auf die Sitzung aus, innerhalb derer es eingegeben wurde. Nach einer Neuanmeldung  muß es also erneut eingegeben werden.

Falls es ein Standard-SQL -Kommando gibt, das auch von MySQL  verstanden wird, so wird meist dies in diesem Kurs vorgestellt. Andernfalls geben wir das Standard-SQL -Kommando manchmal separat an.

Das folgende Kommando von Standard-SQL  stellt ein Schema als aktuelles Schema ein, es wird aber nicht von MySQL  verstanden.

Standard-SQL -Kommando (F92, F761 (1999), F761 (2003), S11 19.6) — kein MySQL 
SET SCHEMA 'S';

Anzeige aller Schemata

Das folgende Kommando zeigt die vorhandenen Schemata an.

Konsole
SHOW SCHEMAS;

Anzeige des derzeit eingestellten Schemas

Das folgende Kommando zeigt ein eventuell mit »USE« zuvor eingestellte Schema hinter dem Etikett »Current database:« an.

Konsole
STATUS

Validatoren

URIs einiger SQL-Validatoren

http://developer.mimer.com/sql-validator-test/

http://developer.mimer.com/sql-validator-99/

http://developer.mimer.com/sql-validator-92/

Für einige Abfragen geben wir im folgenden an, ob sie gemäß der Ausgabe von Validatoren auch dem Sprachstandard „Entry SQL-92“ (E92), „Core SQL-99“ (C99) und/oder „Core SQL-2003“ (C03) genügen.

Konformitäten
developer mimer se validator parser92: *** Entry SQL-92 *** (von nun an „E92“ genannt)
developer mimer se validator Mimer SQL-99 Validator (von nun an „S99“ genannt)
developer mimer com validator parser200x: Conforms to Core SQL-2003 (von nun an „C03“ genannt)

Diese Konformität wurde mit automatischen Prüfdiensten aus dem Web getestet.

MySQL  ein MySQL -Kommando
S92 ein Standard-SQL -Kommando nach dem Standard von 1992 (eventuell nachfolgende Angaben bezeichnen den Teil des Standards)
E92 ein Standard-SQL -Kommando nach dem Standard von 1992, Entry Level (ähnlich SQL-89)
F92 ein Standard-SQL -Kommando nach dem Standard von 1992, full
T92 ein Standard-SQL -Kommando nach dem Standard von 1992, Transitional
I92 ein Standard-SQL -Kommando nach dem Standard von 1992, Intermediate
S99 ein Standard-SQL -Kommando nach dem Standard von 1999
C99 ein Standard-SQL -Kommando nach dem Standard von 1999, Core
S03 ein Standard-SQL -Kommando nach dem Standard von 2003
C03 ein Standard-SQL -Kommando nach dem Standard von 2003, Core
S11 ein Standard-SQL -Kommando nach dem Standard von 2011

Falls ein Kommando einem Standard genügt, so genügt es in der Regel auch späteren Versionen des Standards, auch wenn dies nicht immer ausdrücklich so angegeben ist.

Im allgemeinen ist es aus Sicht der Kompatibilität besser, wenn ein Kommando einem älteren Standard (wie dem von 1992) entspricht, da solche Kommandos von vielen SQL -Datenbanksystemen unterstützt werden.

Syntax

Das folgende Syntaxdiagramm zeigt eine vereinfachte Syntax der Schema-Definition und der DROP-SCHEMA-Anweisung.

Schemadefinition (vereinfacht)
     .------.      .------.     .------------.
--->( CREATE )--->( SCHEMA )--->| Bezeichner |--->
'------' '------' '------------'
DROP-SCHEMA-Anweisung (vereinfacht)
     .----.      .------.     .------------. 
--->( DROP )--->( SCHEMA )--->| Bezeichner |--->
'----' '------' '------------'

Übungsaufgaben

/   Schema anlegen

Geben Sie die folgenden drei Kommandos in dieser Reihenfolge ein:

Zitate aus der Norm*

Das folgende Zitat aus der Norm zeigt das Semikolon »;« als Teil eines <direct SQL statement>.

9075-2 22 (Entwurf von 2010, vereinfacht)*

22 Direct invocation of SQL
        22.1 〈direct SQL statement〉
                Function
                        Specify direct execution of SQL.
                Format
                        〈direct SQL statement〉 ::=
                                〈directly executable statement〉 〈semicolon
                        〈directly executable statement〉 ::=
                                〈direct SQL data statement〉 |
                                〈SQL schema statement〉 |
                                〈SQL transaction statement〉 |
                                〈SQL connection statement〉 |
                                〈SQL session statement〉 |
                                〈direct implementation-defined statement〉
                        direct SQL data statement〉 ::=
                                〈delete statement: searched〉 |
                                〈direct select statement: multiple rows〉 |
                                〈insert statement〉 |
                                〈update statement: searched〉 |
                                〈truncate table statement〉 |
                                〈merge statement〉 |
                                〈temporary table declaration〉
        22.2
                        <direct select statement: multiple rows> ::=
                                <cursor specification>
        14.3
                        <cursor specification> ::=
                                <query expression>
        7.13
                        <query expression> ::= … <query specification> …
        7.12
                        <query specification> ::= SELECT …

MySQL  Löschen eines Schemas, nur falls es existiert ⃗

Das folgende Kommando löscht ein Schema namens »S«, falls diese existiert. Es kommt, im Gegensatz zum vorigen Kommando nicht zu einer Fehlermeldung, falls dieses Schema schon vorher nicht existiert.

An Stelle von »S« kann auch ein anderer Name verwendet werden.

Aussprache von “exists ”: /ɛgˈzɪsts/.

Konsole (MySQL) – falls das Schema »S« vor der Eingabe des Kommandos existiert
DROP SCHEMA   IF EXISTS   S;
Query OK, 2 rows affected (0.19 sec)
Konsole (MySQL) – falls das Schema »S« vor der Eingabe des Kommandos nicht existiert
DROP SCHEMA   IF EXISTS   S;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Das »IF EXISTS« verhindert also nur eine Fehlermeldung, es bietet keine zusätzliche Funktion.

An Stelle von »S« kann auch ein anderer Name verwendet werden.

»IF EXISTS« ist kein  Standard-SQL, sondern eine Erweiterung von MySQL.

MySQL  »IF NOT EXISTS« ⃗

Wenn das Kommando statt mit »CREATE SCHEMA« mit »CREATE SCHEMA IF NOT EXISTS« beginnt, wird eine eventuelle Fehlermeldung vermieden, die erscheint, wenn ein Schema mit dem folgenden Namen schon existiert.

Solch eine Fehlermeldung kann für einen Benutzer, der SQL -Kommandos einzeln eingibt nützlich sein. Falls ein Skript jedoch nur sicherstellen will, daß ein Schema mit einem bestimmten Namen existiert, egal ob dies dazu neu angelegt werden muß oder nicht, kann es übersichtlicher sein, eine Fehlermeldung mit »IF NOT EXISTS« zu unterdrücken.

»IF NOT EXISTS« ist kein  Standard-SQL, sondern eine Erweiterung von MySQL.

Syntax ⃗

Das folgende Syntaxdiagramm zeigt die vereinfachte Syntax der CREATE-SCHEMA- und DROP-SCHEMA-Anweisung. Dabei sind die roten Teile kein Teil von Standard-SQL .

CREATE-SCHEMA-Anweisung (vereinfacht)
     .------.      .------.                                                 .------------.     .-.
--->( CREATE )--->( SCHEMA )--->.------------------------------------->.--->| Bezeichner |--->( ; )--->
'------' '------' | ^ '------------' '-'
| |
| .--. .---. .------. |
'--->( IF )--->( NOT )--->( EXISTS )---'
'--' '---' '------'
DROP-Anweisung (vereinfacht)
     .----.      .------.                                      .------------.     .-.
--->( DROP )--->( SCHEMA )--->.-------------------------->.--->| Bezeichner |--->( ; )--->
'----' '------' | ^ '------------' '-'
| |
| .--. .------. |
'--->( IF )--->( EXISTS )---'
'--' '------'

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722373 stefan_ram:722373 Ändern des Schemas mit MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722373, slrprddef722373, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/schema_aendern_mysql