Dieser Artikel bietet eine Einführung in SQL und praktische Beispiele. Wir sehen uns an, wie wir Datenbanken und Tabellen erstellen und löschen.

Vorbereitung des Systems

Als Grundlage verwende ich XAMPP/MAMP. Das sind Komplettpakete, welche eine fertige Umgebung zur Entwicklung von Webseiten mit PHP bereitstellen. Sie enthalten u.a. einen Webserver (Apache/NGINX), die PHP Laufzeitumgebung und einen SQL-Server (MySQL/MariaDB).

XAMPP ist die Variante für Windows. MAMP ist prinzipiell das Gegenstück für Mac OS. Es gibt weitere Pakete wie LAMP für Linux. Wichtig ist hierbei nur, dass ein lokaler SQL-Server ausgeführt wird. Es kann auch ein reiner MySQL bzw. MariaDB-Server installiert werden.

Die hier vorgestellten Skripte habe ich unter MySQL 5.6.34 ausgeführt. Als Oberfläche nutze ich MySQL Workbench. Da die Installation einfach ist, gehe ich nicht näher darauf ein. Ich habe alle Einstellungen bei den Standardwerten gelassen.

Ich gehe davon aus, dass es bekannt ist, wie eine Verbindung mit der lokalen Datenbank hergestellt wird und die SQL-Befehle auszuführen sind. Ansonsten verweise ich hier auf den Hersteller der jeweiligen Umgebung, da es sehr viele verschiedene Datenbanken und Oberflächen gibt.

Ausprägungen von SQL

SQL steht für Structured Query Language (etwa „strukturierte Abfragesprache“). Mit Hilfe dieser Sprache kann, unabhängig vom Datenbankserver, eine Datenbank verwaltet werden. Es gibt einen SQL-Standard, welcher für alle relationalen Datenbankserver identisch ist. Hierbei ist zu beachten, dass jeder Datenbankhersteller neben diesem Standard eigene Erweiterungen besitzt. Diese Befehle sind teilweise auch auf anderen Systemen zu finden, können jedoch anders heißen.

SQL wird in folgende Teile untergliedert:

  • DML (Data Manipulation Language)
  • DDL (Data Definition Language)
  • DCL (Data Control Language)

Data Manipulation Language

Unter DML werden Befehle zusammengefasst, welche die Daten manipulieren. Dies schließt Funktionen wie insert, update oder delete ein. Im Vergleich zu der Tabellen-Darstellung im ersten Teil, führen diese Operationen Änderungen auf Zeilenebene aus.

Data Definition Language

Die DDL definiert die Datenstrukturen innerhalb eines DBMS. Datenbanken, Tabellen, Indizes und Views fallen darunter. Verglichen mit den vorherigen Artikel ändert die DDL die Tabellenstruktur (hinzufügen neuer Tabellen, ändern der Spalten einer Tabelle).

Data Control Language

Die DCL organisiert das Rechtskonzept einer Datenbank. Darunter fallen die Benutzer- und Rechteverwaltung. Hier kann der Name oder das Kennwort eines Benutzers geändert werden.

SQL in Action

Erstellen von Datenbanken

Schauen wir uns nun an, wie wir eine Datenbank verwalten können und neue Tabellen erstellen. Folgender Befehl zeigt alle vorhandenen Datenbanken an:

show databases;

In meinem Falle existieren die Datenbanken information_schema, mysql und performance_schema. Nun legen wir eine neue Datenbank für unser Beispiel an.

create database WeLoveSql;

Die Ausführung sollte ohne Probleme erfolgen. Ansonsten wird der Fehler im unteren Bereich von MySQL Workbench angezeigt. Je nach Konfiguration kann es vorkommen, dass Datenbanken immer kleingeschrieben erstellt werden. Dies ist abhängig von der Umgebung, kann jedoch meist frei eingestellt werden.

Mit drop database NAME kann eine Datenbank inklusiver aller Tabellen etc. gelöscht werden. Achtung: Hierbei gehen alle Daten verloren!

drop database WeLoveSql;

Ein use erlaubt es uns, eine Standarddatenbank für die SQL-Befehle auszuwählen. Wenn wir beispielsweise eine Tabelle erstellen oder Daten abfragen, erfolgt dies immer auf der ausgewählten Datenbank.

use WeLoveSql;

Mit use kann die Datenbank jederzeit gewechselt werden. Ohne use sollte die gewünschte Datenbank explizit angegeben werden, um eine Verwechslung zu vermeiden (näheres hierzu im nächsten Abschnitt).

Erstellen von Tabellen

Das Schema, um eine Tabelle zu erstellen, sieht folgendermaßen aus:

create table DATENBANK.NAME(
  FELDNAME FELDTYP OPTIONEN
);

-- Erstellung einer Personen-Tabelle
create table WeLoveSql.Person (
  ID int primary key auto_increment,
  Firstname varchar(50) not null,
  Lastname varchar(50) not null,
  Gender varchar(1)
);

create table besagt, dass wir eine Tabelle erstellen möchten. WeLoveSql.Person spezifiziert die Datenbank und den Tabellennamen. Wenn wir vorher use WeLoveSql ausgeführt haben, kann die explizite Angabe der Datenbank weggelassen werden.

Für einzelne Felder (Spalten) der Tabelle geben wir zuerst deren Namen an gefolgt vom Typen. Es gibt verschiedene Typen wie int (Integer – Ganzzahlen), varchar (Variable Zeichenlänge mit maximaler Länge), Text, DateTime und viele mehr (siehe: MariaDB Data Types).

Der Teil, den ich OPTIONEN genannt habe, erlaubt eine genauere Spezifizierung der Spalte. Primary Key gibt an, dass dies der einmalige Primärschlüssel für einen Datensatz dieser Tabelle es. Es empfiehlt sich, diesen ID oder TabellennameID zu nennen (ich finde ID schöner, da es schön kurz ist).
Not null bedeutet, dass dieser Wert angegeben werden muss! Wird beim Einfügen dieses Datensatzes der Wert leer gelassen, gibt es eine Fehlermeldung. An dieser Stelle sei angemerkt, dass ein leerer String „“ nicht NULL ist (näheres im nächsten Kapitel über Abfragen).

Es gibt noch weitere Optionen wie auto_increment (automatisches erhöhen des Wertes für einen neuen Datensatz, default (Standardwert für NULL-Werte festlegen), check (Validierung eines Wertes beim Einfügen) und weitere (siehe: MariaDB Create Table).

Zudem kann die Tabelle selbst Optionen beinhalten wie einen Kommentar oder eine Spezifikation, welche Engine für die Speicherung verwendet wird.

Diese Tabelle können wir mit folgendem Ausdruck wieder löschen:

drop table Person;

Auch hier wäre eine Auswahl der Datenbank mit drop table WeLoveSQl.Person möglich.

Ausblick

Im nächsten Artikel werde ich gezielt auf die Werte innerhalb einer Tabelle eingehen. Wir sehen uns gemeinsam an, wie wir neue Werte anlegen, manipulieren und löschen. Des Weiteren führen wir Verknüpfungen mit Joins durch.