CREATE TABLE personen (pid INT, name VARCHAR(500), geboren DATE);
Datentypen
Datentyp
Alias
Beschreibung
Beispiel
INTEGER
INT
Ganze Zahl
-217
DECIMAL(p,s)
NUMERIC
Zahl mit p Stellen, davon s nach dem Dezimalpunkt
DECIMAL(5, 2) -149.99
DOUBLE
REAL
FLießkommazahl (nicht exakt)
-15.127E-2
CHARACTER(l)
CHAR
Zeichenkette mit fixer Länge l (Zu kurze Werte werden mit Leerzeichen aufgefüllt)
CHAR(3) ‘AB ‘
CHARACTER VARYING(l)
VARCHAR
Zeichenkette mit maximaler Länge l
VARCHAR(3) ‘AB’
DATE
Datum (Jahr, Monat, Tag)
‘2020-11-18’
TIMESTAMP
Zeitstempel (Datum und Uhrzeit)
‘2020-11-18 14:37:52.681’
Beispiel
CREATE TABLE kunden ( kundennummer INT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(500) CHECK (email LIKE '%@%') UNIQUE, passwort CHAR(32), land VARCHAR(100) DEFAULT 'Deutschland', geworben_von INT REFERENCES kunden(kundennummer));
Constraints
NULL - Standard
NULL-Werte sind in der Spalte erlaubt
CREATE TABLE kunden (/* ... */, name VARCHAR(100) NULL)
NOT NULL
NULL-Werte sind in der Spalte verboten
CREATE TABLE kunden (/* ... */, name VARCHAR(100) NOT NULL)
Wenn der Primärschlüssel zusammengesetzt ist aus mehreren Spalten, ist es nicht mehr möglich, einfach PRIMARY KEY in die Spaltenoptionen zu schreiben. Stattdessen muss das PRIMARY-KEY-Constraint unten drunter geschrieben werden. Der Grund dafür ist, dass es nicht mehrere Primärschlüssel geben kann. Eine Tabelle hat immer nur einen Primärschlüssel, dieser kann jedoch zusammengesetzt sein aus mehreren Spalten. Das gleiche gilt für FOREIGN-KEY-Constraints für zusammengesetzte Fremdschlüssel.
DEFAULT
Wird beim Einfügen in die Tabelle der Wert für eine Spalte nicht gesetzt, wird der DEFAULT-Wert dort eingetragen (standardmäßig NULL).
CREATE TABLE kunden (/* ... */, land VARCHAR(100) DEFAULT 'Deutschland');
Sequenzen / Autoincrement
Primärschlüsselwerte (z. B. IDs) automatisch erzeugen lassen.
-- MySQLCREATE TABLE kunden(kundennr INT PRIMARY KEY AUTO_INCREMENT, ...);-- PostgreSQLCREATE TABLE kunden(kundennr SERIAL PRIMARY KEY , ...);
CHECK
Check und dann ein boolsches Prädikat, welches true sein muss damit kein Fehler entsteht.
CREATE TABLE kunden (/* ... */, email VARCHAR(500) CHECK (email LIKE '%@%'));CREATE TABLE bewertungen (/* ... */, sterne INT CHECK (sterne BETWEEN 1 AND 5));CREATE TABLE personen (/* ... */, geburtsdatum DATE, hochzeitsdatum DATE CHECK (hochzeitsdatum > geburtsdatum));
Referentielle Aktionen
ON DELETE oder ON UPDATE:
CASCADE: Alle Produkte auch löschen/updaten
SET NULL / SET DEFAULT: NULL / Default-Wert setzen
RESTRICT: Löschen verbieten
NO ACTION (Standardverhalten): erst mal abwarten
Beispiel
CREATE TABLE produkte ( produktnummer INT PRIMARY KEY, bezeichnung VARCHAR(100) NOT NULL, preis DECIMAL(9,2), hersteller VARCHAR(50) REFERENCES hersteller(firma) ON DELETE SET NULL ON UPDATE CASCADE);
Würde ein Hersteller gelöscht werden, würden alle Produkte die diesen Hersteller als Fremdschlüssel referenzieren, diesen auf NULL gesetzt bekommen.
Das ON UPDATE CASCADE sorgt dafür, dass bei einer Umbenennung im Primärschlüsselattribut des Herstellers (Firma) diese Umbenennung auch bei den Produkten dieses Herstellers erfolgt.
Ähnliche Tabellen erstellen
LIKE
Tabelle mit gleichen Kopfzeilen wird kopiert, aber keine Daten
CREATE TABLE kunden2 (LIKE kunden);-- zusätzliche spalten:CREATE TABLE kunden2 (LIKE kunden, INT zusatzwert);CREATE TABLE kunden2 (LIKE kunden, LIKE mehr_kunden);
AS
Ergebnis des SELECT-Befehls wird in die neue Tabelle gespeichert
CREATE TABLE schrottkarren AS SELECT * FROM pkw WHERE leistung < 60