SQL ist unser Alles

Wie Sie wahrscheinlich bereits erraten haben, können alle Befehle an den SQL-Server über SQL-Abfragen gegeben werden. Alles.

Diese Teams sind offiziell in 4 Gruppen eingeteilt:

  • Datendefinitionsanweisungen (Data Definition Language, DDL ) :

    • CREATE erstellt ein Datenbankobjekt (Datenbank selbst, Tabelle, Ansicht, Benutzer usw.)
    • ALTER ändert ein Objekt
    • DROP entfernt ein Objekt
  • Datenmanipulationsoperatoren (Data Manipulation Language, DML ) :

    • SELECT wählt Daten aus, die bestimmte Bedingungen erfüllen
    • INSERT fügt neue Daten hinzu
    • UPDATE ändert bestehende Daten
    • DELETE entfernt Daten
  • Datenzugriffsdefinitionsoperatoren (Data Control Language, DCL ) :

    • GRANT gewährt einem Benutzer (einer Gruppe) Berechtigungen, bestimmte Vorgänge an einem Objekt auszuführen
    • REVOKE widerruft zuvor erteilte Berechtigungen
    • DENY legt ein Verbot fest, das Vorrang vor einer Genehmigung hat
  • TCL- Anweisungen ( Transaction Control Language) :

    • COMMIT wendet eine Transaktion an
    • ROLLBACK macht alle im Kontext der aktuellen Transaktion vorgenommenen Änderungen rückgängig
    • SAVEPOINT unterteilt eine Transaktion in kleinere Abschnitte

Und auf den ersten beiden Ebenen haben wir nur Varianten der SELECT-Anweisung untersucht. Stellen Sie sich vor, wie viele interessante Dinge uns in Zukunft erwarten.

Da wir uns hier jedoch hauptsächlich auf Java-Programmierer vorbereiten, werden wir uns mit den Szenarien befassen, denen Sie bei der Arbeit auf jeden Fall begegnen werden.

Der Systemadministrator des Projekts wird höchstwahrscheinlich alle Datenbanken erstellen, aber Sie müssen auf jeden Fall viele Male selbst eine Auswahl aus den Daten treffen.

Darüber hinaus schreibt Ihr Code manchmal nicht alle Daten in die Datenbank oder schreibt sie falsch, sodass Sie oft mit Stiften hineinklettern und sehen müssen, was tatsächlich dort gespeichert ist.

Gehen wir noch einmal die Dinge durch, die wir in den vorherigen Vorlesungen angesprochen haben.

Erstellen eines Schemas in einer Datenbank

Um ein neues Schema im DBMS zu erstellen, müssen Sie den folgenden Befehl ausführen:

CREATE SCHEMA Name;

Dies ist die einfachste Option. Außerdem können Sie beim Erstellen eines neuen Schemas das Datenkodierungsformat und andere Parameter angeben.

Wenn Sie das Schema löschen möchten, aber nicht sicher sind, ob es existiert, müssen Sie den folgenden Befehl ausführen:

DROP SCHEMA IF EXIST Name;

Sie werden diese Befehle oft in Dateien mit Backups verschiedener Datenbanken sehen, deshalb stelle ich sie hier vor.

Auswahl des aktuellen Schemas

Wenn Sie viele Schemata in Ihrem DBMS haben, kann es leicht passieren, dass verschiedene Schemata dieselben Tabellen haben. Um Verwirrung zu vermeiden, können Sie zwei Dinge tun:

  • Geben Sie immer den Schemanamen vor den Tabellennamen ein
  • Geben Sie das Standardschema an

Schreiben wir eine Abfrage, die Daten aus der Benutzertabelle auswählt , die sich im Testschema befindet . Es wird ungefähr so ​​aussehen:

SELECT * FROM test.user;

Dies ist einfach unverzichtbar, wenn Sie mehrere Tabellen aus unterschiedlichen Schemata in einer Abfrage verknüpfen (JOIN) müssen.

Übrigens machen wir in der Java-Sprache oft etwas Ähnliches: Wenn wir im Code Klassen mit demselben Namen aus verschiedenen Paketen verwenden müssen, fügen wir den Paketnamen vor dem Klassennamen hinzu.

Die zweite Möglichkeit besteht darin, das Standardschema anzugeben . Wenn die Abfrage einen Tabellennamen, aber kein Schema angibt, wird das Standardschema verwendet. Verwenden Sie dazu die USE-Anweisung :

USE name - schemes;

Schreiben wir die vorherige Abfrage mit der USE-Anweisung neu:

USE test;
SELECT * FROM user;

Eine Ansicht erstellen

Zusätzlich zu Tabellen mit realen Daten können Sie mit SQL so etwas wie virtuelle Tabellen speichern, bei denen Daten aus realen Tabellen abgerufen werden. Solche virtuellen Tabellen werden VIEW genannt.

Eine solche Tabelle kann keine echten Daten speichern und ruft bei jedem Zugriff Daten aus echten Tabellen ab. Der Inhalt einer solchen VIEW wird über eine SQL-Abfrage spezifiziert.

Sie können eine VIEW aus jeder SELECT-Abfrage mit einem Befehl wie dem folgenden erstellen:

CREATE VIEW Name AS
SELECT-request;
Schreiben wir eine Abfrage, die eine virtuelle Tabelle „public_employee“ basierend auf der Mitarbeitertabelle erstellt, in der die Gehaltsinformationen des Mitarbeiters ausgeblendet werden:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

Im obigen Beispiel enthält unsere Tabelle (VIEW) public_employee nur Mitarbeiter-IDs und deren Namen, jedoch keine Informationen über deren Gehalt. Sie können solche Ansichten an derselben Stelle wie echte Tabellen verwenden.

Warum werden Ansichten benötigt? Sie haben eine Reihe von Vorteilen:

Flexible Kontrolle des Zugriffs auf Informationen . Sie können bestimmten Benutzern nur Zugriff auf VIEW gewähren, jedoch keinen Zugriff auf Tabellen. Und in View entnehmen Sie nur öffentliche Informationen aus Tabellen. Wenn den Tabellen in Zukunft neue Spalten mit wichtigen Informationen hinzugefügt werden, gelangen diese außerdem nicht versehentlich in die Ansicht.

Datendenormalisierung . Zur Vereinfachung der Speicherung werden Daten oft in Hunderte und Tausende von Tabellen unterteilt, aber für einen normalen Menschen ist es nicht sehr bequem, mit solchen Daten zu arbeiten – man muss zu komplexe Abfragen schreiben. Mit View können Sie virtuelle Tabellen erstellen, die Daten aus Dutzenden verschiedener Tabellen in einer einzigen Tabelle anzeigen.

Polymorphismus und Kapselung . Sie können die Strukturen Ihrer Datenbank ändern. Gleichzeitig werden Benutzer des Programms, die mit Ihren Ansichten arbeiten, nicht ahnen, dass sich etwas geändert hat. Und es ist nicht erforderlich, den Code von Programmen, die Zugriff auf View haben, neu zu schreiben. Sie müssen lediglich das SQL-Skript anpassen, das sich auf VIEW bezieht.

Nur lesen . View kann nur mit einer SELECT-Abfrage festgelegt werden, daher kann die Arbeit mit View die Daten in echten Tabellen in keiner Weise ändern. Dies ist übrigens ein weiterer Pluspunkt für das Abfrage-Caching. Aber dazu nächstes Mal mehr.