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.
USE mydatabase;
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:
SELECT * FROM users;
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:
SELECT * FROM users;
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.


