SQLite - Datentypen

Hallo, zukünftige Datenbank-Zauberer! Heute tauchen wir in die faszinierende Welt der SQLite-Datentypen ein. Keine Sorge, wenn du neu im Programmieren bist – ich werde dein freundlicher Guide auf dieser Reise sein und alles Schritt für Schritt erklären. Also, hol dir eine Tasse Kaffee (oder Tee, wenn das dein Ding ist) und los geht's!

SQLite - Data Type

SQLite Speicherclasses

Zunächst once, lassen Sie uns über SQLite-Speicherclasses sprechen. Denkt euch diese als die grundlegenden Bausteine der Daten in SQLite. Es gibt fünf Haupt-Speicherclasses:

  1. NULL
  2. INTEGER
  3. REAL
  4. TEXT
  5. BLOB

Lassen Sie uns diese mit einigen Beispielen auseinandernehmen:

NULL

CREATE TABLE example (
id INTEGER,
name TEXT,
age INTEGER
);

INSERT INTO example (id, name) VALUES (1, 'Alice');

In diesem Beispiel haben wir eine Tabelle erstellt und eine Zeile eingespeichert, bei der die 'age'-Spalte nicht angegeben ist. SQLite weist ihr automatisch einen NULL-Wert zu. NULL repräsentiert das Fehlen von Daten – es ist so, als würde man sagen: "Wir wissen nicht, wie alt Alice ist."

INTEGER

INSERT INTO example (id, name, age) VALUES (2, 'Bob', 30);

Hier haben wir Bobs Alter als 30 eingespeichert. SQLite speichert dies als INTEGER. Ganzzahlen sind ganze Zahlen ohne Dezimalstellen.

REAL

CREATE TABLE products (
id INTEGER,
name TEXT,
price REAL
);

INSERT INTO products (id, name, price) VALUES (1, 'Kaffee', 3.99);

Der Preis 3.99 wird als REAL-Wert gespeichert, was die Art und Weise von SQLite ist, Dezimalzahlen zu handhaben.

TEXT

INSERT INTO example (id, name, age) VALUES (3, 'Charlie', '25 Jahre alt');

Obwohl wir das Alter speichern, haben wir hier TEXT verwendet. SQLite speichert "25 Jahre alt" als Zeichenkette.

BLOB

BLOB steht für Binary Large Object. Es wird verwendet, um binäre Daten wie Bilder oder Dateien zu speichern.

CREATE TABLE files (
id INTEGER,
name TEXT,
content BLOB
);

-- Das Einfügen eines BLOB würde normalerweise im Anwendungscode und nicht in rohem SQL erfolgen

SQLite Affinitätstyp

Nun sprechen wir über Typaffinität. Es ist die Art und Weise, wie SQLite flexibel mit Datentypen umgeht. Stellt euch vor, SQLite versucht sein Bestes, um zu verstehen, welchen Datentyp ihr speichern wollt.

Es gibt fünf Typaffinitäten in SQLite:

  1. TEXT
  2. NUMERIC
  3. INTEGER
  4. REAL
  5. BLOB

Hier ist eine lustige Tabelle, die euch zeigt, wie SQLite entscheiden kann, welche Affinität zu verwenden:

Wenn der deklarierte Typ enthält... Die Affinität ist...
INT INTEGER
CHAR, CLOB, TEXT TEXT
BLOB BLOB
REAL, FLOA, DOUB REAL
Alles andere NUMERIC

Lassen Sie uns das in die Tat umsetzen:

CREATE TABLE affinity_example (
a TEXT,
b NUMERIC,
c INTEGER,
d REAL,
e BLOB
);

INSERT INTO affinity_example VALUES
('123', '456', '789', '101112', x'ABCDEF');

SELECT typeof(a), typeof(b), typeof(c), typeof(d), typeof(e) FROM affinity_example;

Dies gibt Folgendes aus:

text, integer, integer, real, blob

Beachtet, wie '456' aufgrund der NUMERIC-Affinität ein Integer wurde!

SQLite Affinität und Typnamen

SQLite ist ziemlich flexibel, wenn es um Spaltentypnamen geht. Ihr könnt Standard-SQL-Typen verwenden, und SQLite wird sie auf seine Affinitäten abbilden. Hier ist ein schneller Überblick:

Typname Affinität
INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 INTEGER
CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOB TEXT
BLOB, kein Datentyp angegeben BLOB
REAL, DOUBLE, DOUBLE PRECISION, FLOAT REAL
NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME NUMERIC

Boolean Datentyp

SQLite hat keinen separaten Boolean-Typ, aber lasst euch nicht täuschen! Wir können dennoch true/false-Werte verwenden. SQLite behandelt 0 als false und 1 als true.

CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
description TEXT,
completed BOOLEAN
);

INSERT INTO tasks (description, completed) VALUES
('SQLite lernen', 0),
('SQL meistern', 1);

SELECT * FROM tasks WHERE completed = TRUE;

Dies gibt die "SQL meistern" Aufgabe zurück, da ihr 'completed'-Wert 1 (true) ist.

Datum und Uhrzeit Datentyp

Zuletzt, aber nicht weniger wichtig, sprechen wir über Daten und Zeiten. SQLite hat keinen eingebauten Datum oder Uhrzeit-Typ, aber es bietet mehrere Datum und Uhrzeit-Funktionen, um mit diesen Werten zu arbeiten.

Wir speichern Daten und Zeiten typischerweise als TEXT, INTEGER oder REAL:

CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date_text TEXT,
date_int INTEGER,
date_real REAL
);

INSERT INTO events (name, date_text, date_int, date_real) VALUES
('SQLite Workshop', '2023-06-15', 1686787200, 1686787200.0);

SELECT name,
date_text,
datetime(date_int, 'unixepoch') as date_from_int,
datetime(date_real, 'unixepoch') as date_from_real
FROM events;

Dies gibt etwas wie folgt aus:

SQLite Workshop, 2023-06-15, 2023-06-15 00:00:00, 2023-06-15 00:00:00

Und da habt ihr es! Wir haben die wichtigsten Datentypen in SQLite abgedeckt, von grundlegenden Speicherclasses bis hin zu den feineren Konzepten der Typaffinität. Denkt daran, dass_SQLites Flexibilität sowohl seine Stärke als auch etwas ist, das ihr im Auge behalten solltet. Testet eure Daten immer, um sicherzustellen, dass sie so gespeichert und abgerufen werden, wie ihr es erwartet.

Übung macht den Meister, alsochtet nicht, diese Konzepte auszuprobieren. Erstellt eure eigenen Tabellen, fügt Daten ein und seht, wie SQLite verschiedene Szenarien handhabt. Bereit, werdet Datenbank-Zauberer!

Frohes Coden und möge eure Datenbanken stets normalisiert sein!

Credits: Image by storyset