Bis jetzt haben wir mit einer vorgegebenen Tabelle gearbeitet. Jetzt lernen wir wie wir eine neue Tabelle erstellen können.
Datentyp | Beschreibung |
---|---|
SERIAL PRIMARY KEY | Automatisch hochzählende des Primärschlüssel (id) |
INT | Ganzzahl |
FLOAT | Dezimalzahl mit Nachkommastelle |
TEXT | Sehr langer Text |
VARCHAR(255) | Kleiner Text (max 255 Zeichen; kann auch kleiner sein) |
TIMESTAMP | Zeitstempel |
Hier ein Beispiel wie die Tabelle users
definiert wird.
CREATE TABLE users(
id SERIAL PRIMARY KEY,
name VARCHAR(255),
age INT,
city VARCHAR(255),
country VARCHAR(2)
);
Einschränkungen | Beschreibung |
---|---|
NOT NULL | Nicht leer |
UNIQUE | Einzigartig |
REFERENCES | Fremdschlüssel auf andere Tabelle |
DEFAULT | Ein standart Wert wenn nichts angeben |
Beispiel:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
Zu beachten: TIMESTAMP verwenden hier den Zusatz WITH TME ZONE
, was auch die Zeitzone im Timestamp festhält, und als Standard Wert wir now()
verwenden, was uns die aktuelle Zeit zurück gibt.
Löst jetzt Aufgabe 1-3.
Wenn wir wie im Intro Video eine Relation (also Verbindung) zwischen 2 Tabellen herstellen wollen, müssen wir einen Fremdschlüssel verwenden.
Der Primärschlüssel einer Tabelle ist ja die id
, wir müssen also irgendwie diese id
in einer anderen Tabelle speichern können.
Dies schreiben wir wie folgt:
user_id INT NOT NULL REFERENCES users(id)
.
user_id
: Der Name dieser Spalte (users table in singular + _id
)INT
: Damit ist die id
gemeint, welche ja eigentlich ein Int (integer) istNOT NULL
: Ist optional, je nach dem der Fremdschlüssel hier zwingend ist oder nichtREFERENCES users(id)
: Erstellt einen Verbindung zur id
im users tableHier ein Beispiel einer Posts Tabelle:
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
text TEXT DEFAULT 'TODO',
user_id INT NOT NULL REFERENCES users(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
Löst jetzt Aufgabe 4.
Mit DROP TABLE table_name;
kannst du eine bestehende Tabelle löschen.
Teste deine Queries im Editor:
hier öffnen