MySQL-Tabellen erstellen und Daten einfügen für Einsteiger

MySQL ist ein verbreitetes relationales Datenbankmanagementsystem (RDBMS), das in Webanwendungen, Onlineshops und zahlreichen Backend-Projekten zum Einsatz kommt. Diese Anleitung führt Einsteiger Schritt für Schritt durch das Anlegen von Tabellen und das Einfügen von Daten in MySQL.

Voraussetzungen

Bevor du startest, solltest du Folgendes mitbringen:

  • MySQL ist auf deinem System installiert und eingerichtet.
  • Grundlegendes Verständnis der SQL-Syntax.
  • Zugriff auf die MySQL-Kommandozeile oder MySQL Workbench.

MySQL-Tabellensyntax

CREATE TABLE Syntax

So sieht die Syntax aus, um in MySQL eine Tabelle inklusive Primärschlüssel anzulegen:

CREATE TABLE table_name (
    column1_name data_type PRIMARY KEY,
    column2_name data_type,
    ...
);

Aufgabe eines Primärschlüssels

Ein Primärschlüssel ist eine Spalte (oder eine Kombination aus Spalten), die jede Zeile in einer Tabelle eindeutig kennzeichnet. Dadurch wird sichergestellt, dass keine zwei Datensätze dieselben Primärschlüsselwerte besitzen, was die Datenintegrität unterstützt und doppelte Einträge verhindert. Im folgenden Beispiel übernimmt die Spalte id diese Rolle und stellt sicher, dass jeder Benutzer eine eindeutige Kennung erhält.

Beispiel mit Primärschlüssel

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    email VARCHAR(255)
);

MySQL-Tabellensyntax ohne Primärschlüssel

So sieht die Syntax aus, um in MySQL eine Tabelle ohne Primärschlüssel zu erstellen:

CREATE TABLE table_name (
    column1_name data_type,
    column2_name data_type,
    ...
);

Häufige MySQL-Befehle im Überblick

Hier ist eine Tabelle mit den MySQL-Befehlen aus diesem Tutorial – inklusive Syntax, Zweck und Beispiel:

Command Syntax Description Example
CREATE DATABASE CREATE DATABASE database_name; Creates a new database CREATE DATABASE mydatabase;
USE USE database_name; Selects the database to use for the current session USE mydatabase;
CREATE TABLE CREATE TABLE table_name (column1_name data_type, column2_name data_type, …); Creates a new table in the database CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255));
INSERT INTO INSERT INTO table_name (column1_name, column2_name, …) VALUES (value1, value2, …); Inserts new records into a table INSERT INTO users (name, email) VALUES (‚John Doe‘, ‚<john@example.com>‘);
SELECT SELECT column1_name, column2_name, … FROM table_name; Retrieves data from a database table SELECT * FROM users;
UPDATE UPDATE table_name SET column1_name = value1, column2_name = value2, … WHERE condition; Updates existing records in a table UPDATE users SET name = ‚Jane Doe‘ WHERE id = 1;
REPLACE REPLACE INTO table_name (column1_name, column2_name, …) VALUES (value1, value2, …); Inserts new records into a table, or replaces existing records if a unique key constraint is violated REPLACE INTO users (id, name, email) VALUES (1, ‚Jane Doe‘, ‚jane.doe@example.com‘);
DROP TABLE DROP TABLE IF EXISTS table_name; Deletes a table from the database DROP TABLE IF EXISTS users;
DROP DATABASE DROP DATABASE IF EXISTS database_name; Deletes a database DROP DATABASE IF EXISTS mydatabase;

Schritt 1 – Datenbank erstellen

Zuerst legst du eine Datenbank an, in der deine Tabelle gespeichert wird. Verwende dafür CREATE DATABASE und hänge den gewünschten Namen an. In diesem Beispiel heißt die Datenbank mydatabase.

CREATE DATABASE mydatabase;

Nachdem die Datenbank erstellt ist, wechselst du mit dem Befehl USE hinein. So laufen alle folgenden Schritte im Kontext der neuen Datenbank.

Mit diesen beiden Statements hast du die Datenbank angelegt und als aktive Datenbank für die текущige Sitzung gesetzt.

Schritt 2 – Tabelle erstellen

Um in MySQL eine Tabelle zu erstellen, nutzt du CREATE TABLE und gibst den Tabellennamen an. In diesem Beispiel heißt die Tabelle users. Die Definition steht in Klammern und enthält vier Spalten: id, name, email und registration_date.

Hier ist die Aufschlüsselung der einzelnen Spalten:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(255) UNIQUE,
    registration_date DATE
);

id: Diese Spalte ist als Integer (INT) definiert und wird mit PRIMARY KEY als Primärschlüssel gesetzt. Durch AUTO_INCREMENT steigt der id-Wert bei jedem Insert automatisch um 1, startend bei 1. Damit erhält jeder Datensatz eine eindeutige Kennung.

name und email: Diese Spalten nutzen VARCHAR, um Strings variabler Länge zu speichern. Die Zahl in Klammern legt die maximale Länge fest: für name 100 Zeichen, für email 255 Zeichen. Durch UNIQUE bei email ist jede E-Mail-Adresse eindeutig und kann nicht doppelt vorkommen.

registration_date: Diese Spalte hat den Typ DATE und speichert Datumswerte. Hier wird das Registrierungsdatum eines Users abgelegt.

Mit diesem CREATE TABLE-Statement hast du die Tabelle users mit den definierten Spalten und Eigenschaften erstellt.

Schritt 3 – Daten in die Tabelle einfügen

Um Daten in die users-Tabelle zu schreiben, verwendest du INSERT INTO. Nach dem Tabellennamen (users) gibst du die Spalten an, die gefüllt werden sollen: name, email und registration_date. Anschließend definierst du mit VALUES die einzufügenden Werte.

In diesem Beispiel werden folgende Werte eingefügt:

  • name: ‘John Doe’
  • email: ‘john@example.com’
  • registration_date: ‘2025-01-10’

Hier ist das SQL-Statement zur Umsetzung:

INSERT INTO users (name, email, registration_date)
VALUES ('John Doe', 'john@example.com', '2025-01-10');

Wenn du dieses Statement ausführst, wird ein neuer Datensatz mit den angegebenen Werten in die users-Tabelle geschrieben.

Mehrere Zeilen auf einmal einfügen

Wenn du mehrere Datensätze hinzufügen willst, ist ein einzelnes INSERT INTO mit mehreren VALUES-Blöcken häufig effizienter als mehrere einzelne Inserts. Dadurch sinkt die Anzahl der Datenbankaufrufe, was die Performance verbessern und die Datenbank entlasten kann.

Hier ein Beispiel, wie du mehrere Zeilen in einem Statement einfügst:

INSERT INTO users (name, email, registration_date)
VALUES
('Jane Smith', 'jane@example.com', '2025-01-11'),
('Emily Johnson', 'emily@example.com', '2025-01-12');

In diesem Beispiel werden zwei Zeilen mit einem einzigen INSERT INTO angelegt. Jeder VALUES-Block steht für eine Zeile, getrennt durch Kommas. So kannst du mehrere Datensätze in einem Schritt einfügen.

Schritt 4 – Daten prüfen

Nachdem du Daten eingefügt hast, solltest du kontrollieren, ob alles korrekt gespeichert wurde. So stellst du sicher, dass das Ergebnis den Erwartungen entspricht, und erkennst mögliche Probleme frühzeitig.

Zum Prüfen nutzt du SELECT, um alle Zeilen aus der users-Tabelle zu laden. Mit SELECT * werden alle Spalten (*) aus der angegebenen Tabelle (users) zurückgegeben. Dadurch siehst du den kompletten Datensatz und kannst verifizieren, ob die Einträge vorhanden sind.

Hier ist das SQL-Statement zur Prüfung:

Wenn du das ausführst, solltest du folgende Ausgabe sehen:

Output

+----+------------+-------------------+----------------+
| id | name       | email             | registration_date |
+----+------------+-------------------+----------------+
|  1 | John Doe   | john@example.com | 2025-01-10      |
|  2 | Jane Smith | jane@example.com | 2025-01-11      |
|  3 | Emily Johnson | emily@example.com | 2025-01-12      |
+----+------------+-------------------+----------------+

Schritt 5 – Daten aktualisieren

Das Aktualisieren bereits vorhandener Datensätze ist eine wichtige Aufgabe, um gespeicherte Informationen nachträglich anzupassen. Das unterstützt langfristig die Genauigkeit und Konsistenz der Daten. In diesem Schritt wird gezeigt, wie du einen konkreten Datensatz in der users-Tabelle mit UPDATE änderst.

Zum Aktualisieren verwendest du UPDATE mit dem Tabellennamen, danach SET für die gewünschten Änderungen und WHERE, um festzulegen, welche Zeile(n) betroffen sind. Hier ein Beispiel, das die E-Mail-Adresse des Users mit id = 1 ändert:

UPDATE users SET email = 'john.doe@example.com' WHERE id = 1;

Nach dem UPDATE solltest du prüfen, ob die Änderung korrekt übernommen wurde. Nutze dafür wieder SELECT, um die aktualisierten Datensätze zu laden. Mit SELECT * bekommst du alle Spalten aus der users-Tabelle und kannst kontrollieren, ob der geänderte Wert wie erwartet angezeigt wird.

Hier ist das SQL-Statement zur Prüfung des Updates:

Wenn du das ausführst, solltest du folgende Ausgabe sehen, die zeigt, dass die E-Mail-Adresse des Users mit id = 1 erfolgreich aktualisiert wurde:

Output


+----+------------+-------------------+----------------+
| id | name       | email             | registration_date |
+----+------------+-------------------+----------------+
|  1 | John Doe   | john.doe@example.com | 2025-01-10      |
|  2 | Jane Smith | jane@example.com | 2025-01-11      |
|  3 | Emily Johnson | emily@example.com | 2025-01-12      |
+----+------------+-------------------+----------------+


Praktische Anwendung

Daten einfügen für Blog, CRM oder E-Commerce

In vielen praxisnahen Szenarien wie Blogs, CRM-Systemen (Customer Relationship Management) oder E-Commerce-Websites gehört das Einfügen von Daten in eine Datenbank zu den zentralen Abläufen. Wenn sich beispielsweise ein Nutzer in einem Blog oder Shop registriert, müssen seine Informationen gespeichert werden, damit sie später verfügbar sind. In einem CRM werden Kundendaten in die Datenbank geschrieben, um Kontakte, Interaktionen und Beziehungen nachvollziehbar zu verwalten. Dieser Prozess ist entscheidend, um eine belastbare und skalierbare Backend-Struktur aufzubauen.

Hier ist ein Beispiel, wie du Registrierungsdaten mit PHP und MySQL in eine Datenbank einfügst:

<?php
// Assuming $conn is a valid MySQL connection
if (isset($_POST['register'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password']; // Assuming password is hashed for security

    $query = "INSERT INTO users (name, email, password) VALUES (?, ?, ?)";
    $stmt = $conn->prepare($query);
    $stmt->bind_param("sss", $name, $email, $password);
    $stmt->execute();
    $stmt->close();
}
?>

Einbindung in Backend-Workflows

Das Einfügen von Daten in eine Datenbank ist eng mit vielen Backend-Abläufen verbunden. In Webanwendungen werden Registrierungsdaten typischerweise über serverseitige Sprachen wie PHP, Python oder Node.js in die Datenbank geschrieben. Diese gespeicherten Daten werden anschließend für Login und Authentifizierung, die Pflege von Profilen und personalisierte Nutzererlebnisse verwendet. In CRM-Lösungen ist das Einfügen von Daten wichtig, um Kundenkontakte zu protokollieren, Sales-Pipelines zu steuern und Erkenntnisse für Wachstum zu gewinnen.

Hier ist ein Beispiel, wie du Interaktionsdaten mit Node.js und MySQL in eine Datenbank einfügst:

const mysql = require('mysql');

// Assuming db is a valid MySQL connection
const insertCustomerInteraction = (customerID, interactionType, interactionDate) => {
    const query = "INSERT INTO customer_interactions (customer_id, interaction_type, interaction_date) VALUES (?, ?, ?)";
    db.query(query, [customerID, interactionType, interactionDate], (error, results, fields) => {
        if (error) throw error;
        console.log('Customer interaction inserted successfully');
    });
};

Häufige Fehler

Tabelle existiert bereits

Wenn du versuchst, eine Tabelle zu erstellen, die bereits in der Datenbank vorhanden ist, liefert MySQL eine Fehlermeldung. Um das zu vermeiden, kannst du IF NOT EXISTS in dein CREATE TABLE aufnehmen. Hier ein Beispiel:

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

Falsche Datentypen

Wenn du ungeeignete Datentypen für Spalten wählst, kann das zu Fehlern oder unerwartetem Verhalten führen. Wer zum Beispiel einen String in eine Integer-Spalte schreiben will, bekommt eine Fehlermeldung. Achte darauf, dass die Datentypen deiner Spalten zu den Daten passen, die du einfügst.

Beispiel für eine falsche Datentyp-Nutzung:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    age VARCHAR(3) NOT NULL // Incorrect data type for age, should be INT
);

INSERT INTO users (name, email, age) VALUES ('John Doe', 'john.doe@example.com', 'twenty-five'); // This will result in an error due to incorrect data type for age

Korrigiertes Beispiel:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    age INT NOT NULL // Correct data type for age
);

INSERT INTO users (name, email, age) VALUES ('John Doe', 'john.doe@example.com', 25); // Correct insertion with the right data type for age

Syntaxfehler

Syntaxfehler entstehen oft durch falsch geschriebene SQL-Statements – etwa fehlende Klammern, nicht passende Zeichen, falsch verwendete Keywords oder fehlerhafte Spaltennamen. Um Syntaxprobleme zu reduzieren, solltest du deine Statements sauber formatieren und dich an die MySQL-Syntaxregeln halten.

Beispiel für einen Syntaxfehler:

INSERT INTO users (name, email, age VALUES ('John Doe', 'john.doe@example.com', 25); // Missing closing parenthesis

Korrigiertes Beispiel:

INSERT INTO users (name, email, age) VALUES ('John Doe', 'john.doe@example.com', 25); // Correctly formatted SQL statement

Unterschied zwischen INSERT, INSERT IGNORE und REPLACE

Beim Arbeiten mit MySQL ist es wichtig, die Unterschiede zwischen INSERT, INSERT IGNORE und REPLACE zu kennen. Jede dieser Anweisungen ist für ein anderes Verhalten beim Einfügen von Daten gedacht. Unten findest du eine detaillierte Erklärung jeder Option, inklusive Beispielen und einer Vergleichstabelle.

INSERT

Das klassische INSERT fügt eine neue Zeile in eine Tabelle ein. Existiert die Zeile bereits, wird ein Fehler ausgelöst. Das ist der gängigste Weg, Daten in eine Tabelle zu schreiben.

INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');

INSERT IGNORE

INSERT IGNORE funktioniert ähnlich wie INSERT, ignoriert aber den Fehler, wenn die Zeile schon existiert. Das ist nützlich, wenn du einen Datensatz nur dann einfügen möchtest, wenn er noch nicht vorhanden ist, und du keine Fehlerbehandlung brauchst. Ist die Zeile vorhanden, wird der Einfügeversuch stillschweigend übersprungen.

INSERT IGNORE INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');

REPLACE

REPLACE ähnelt INSERT, ersetzt jedoch eine vorhandene Zeile durch die neuen Daten, wenn sie bereits existiert. Das kann sinnvoll sein, wenn du sicherstellen willst, dass ein Datensatz eingefügt oder bei Bedarf aktualisiert wird, ohne doppelte Zeilen zu behalten.

REPLACE INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');

Vergleichstabelle

Hier ist eine Vergleichstabelle, die die wichtigsten Unterschiede zwischen INSERT, INSERT IGNORE und REPLACE zeigt:

Statement Behavior if Row Exists Error Handling
INSERT Throws an error Raises an error
INSERT IGNORE Ignores the insertion Silently ignores the error
REPLACE Replaces the existing row Raises an error if the row does not exist

Bei der Auswahl der passenden Anweisung solltest du das gewünschte Verhalten berücksichtigen:

  • Verwende INSERT, wenn du eine Zeile hinzufügen und einen Fehler explizit behandeln möchtest, falls der Datensatz bereits existiert.
  • Verwende INSERT IGNORE, wenn doppelte Einträge stillschweigend übersprungen werden sollen, ohne Fehler direkt zu behandeln.
  • Verwende REPLACE, wenn du eine Zeile einfügen oder einen bestehenden Datensatz überschreiben möchtest, falls bereits ein passender Eintrag vorhanden ist.

Wenn du diese Unterschiede verstehst, kannst du die geeignetste Einfügemethode für deinen Anwendungsfall auswählen und gleichzeitig die Datenintegrität in deiner MySQL-Datenbank sicherstellen.

Prepared Statements verwenden

Prepared Statements sind eine sicherere Methode, um SQL mit dynamischen Werten auszuführen. Sie helfen dabei, SQL Injection zu verhindern, indem SQL-Code und Daten getrennt werden. In PHP kannst du dafür mysqli oder PDO nutzen, um Statements vorzubereiten und auszuführen. Hier ist ein kurzes Beispiel mit mysqli:

<?php
// Prepare an SQL statement to insert a new user into the 'users' table
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
// Bind the parameters to the SQL statement, specifying the types of the variables
$stmt->bind_param("ss", $name, $email);
// Assign values to the variables
$name = 'Jane Doe';
$email = 'jane.doe@example.com';
// Execute the prepared statement
$stmt->execute();
// Close the prepared statement
$stmt->close();
?>

FAQs

1. Kann ich eine Tabelle ohne Primärschlüssel erstellen?

Ja, du kannst eine Tabelle ohne Primärschlüssel anlegen. Dennoch wird dringend empfohlen, für jede Tabelle einen Primärschlüssel zu definieren, um die Datenintegrität zu sichern und effiziente Abfragen zu erleichtern. Hier ist ein Beispiel für eine Tabelle ohne Primärschlüssel:

CREATE TABLE users (
  name VARCHAR(255),
  email VARCHAR(255)
);

2. Wie füge ich mehrere Zeilen in einem Query ein?

Du kannst mehrere Zeilen in einem Query einfügen, indem du folgende Syntax verwendest:

INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com'), ('Jane Doe', 'jane.doe@example.com');

3. Was ist der Unterschied zwischen CHAR und VARCHAR in MySQL?

CHAR und VARCHAR sind beides String-Datentypen in MySQL, unterscheiden sich jedoch deutlich darin, wie sie Daten speichern und Speicherplatz verwalten.

CHAR ist ein Datentyp mit fester Länge. Das bedeutet, dass immer genau der für die Spalte definierte Speicherplatz reserviert wird. Ist der gespeicherte Wert kürzer als die angegebene Länge, füllt MySQL den verbleibenden Platz mit nachgestellten Leerzeichen auf. Eine Spalte mit `CHAR(10)` belegt beispielsweise immer Speicherplatz für 10 Zeichen – unabhängig von der tatsächlichen Länge des gespeicherten Strings.

VARCHAR hingegen ist ein Datentyp mit variabler Länge. Er speichert nur die tatsächlich eingegebene Anzahl an Zeichen sowie eine kleine zusätzliche Metainformation zur Längenverwaltung. Dadurch ist VARCHAR deutlich speichereffizienter für Werte, deren Länge variiert.

Hier ist ein Beispiel, das CHAR und VARCHAR kombiniert:

CREATE TABLE users (
  name CHAR(10),
  email VARCHAR(255)
);

4. Wie kopiere ich eine Tabelle und erstelle sie neu in MySQL?

Du kannst eine Tabelle kopieren und gleichzeitig neu anlegen, indem du diese Syntax verwendest:

CREATE TABLE new_users SELECT * FROM users;

Dadurch entsteht eine neue Tabelle new_users mit derselben Struktur und denselben Daten wie die users-Tabelle.

5. Wie erstelle ich eine Datenbank in MySQL?

Um eine Datenbank in MySQL zu erstellen, nutzt du folgenden Befehl:

CREATE DATABASE mydatabase;

Damit wird eine neue Datenbank mit dem Namen mydatabase erstellt.

Fazit

In diesem Tutorial hast du gelernt, wie du in MySQL Tabellen erstellst und Daten mit einfachen SQL-Befehlen einfügst. Außerdem hast du einige typische Fehler kennengelernt und erfahren, wie du sie vermeidest. Das ist erst der Anfang deiner MySQL-Reise.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

uv: Schneller Rust-Paketmanager für Python-Projekte

Python, Tutorial
Vijonavor 2 Stunden uv: Ein Rust-basiertes All-in-One-Tool für Python-Pakete und Projekte Python-Entwickler jonglieren häufig mit mehreren Tools wie pip, virtualenv, pyenv und weiteren, um Pakete, Umgebungen und Projekt-Setups zu verwalten. Dieser…