Mysql Script: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Dynamische Webseiten mit PHP und MySQL – Prinzip = == Einführung == * Dynamische Webseiten generieren Inhalte zur Laufzeit, abhängig von Benutzereingabe…“)
 
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Dynamische Webseiten mit PHP und MySQL – Prinzip =
 
  
== Einführung ==
 
* Dynamische Webseiten generieren Inhalte zur Laufzeit, abhängig von Benutzereingaben oder Datenbankinformationen.
 
* PHP als serverseitige Skriptsprache verarbeitet Anfragen und interagiert mit einer MySQL/MariaDB-Datenbank.
 
* Im Gegensatz zu statischen HTML-Seiten können Inhalte aktualisiert, gefiltert und personalisiert werden.
 
  
== Architektur einer dynamischen Webseite ==
+
== Datenbankverwaltung ==
* Ein typischer Aufbau besteht aus drei Hauptkomponenten:
+
Datenbank erstellen.
** '''Client''' – Webbrowser sendet Anfragen an den Server.
+
* create database my_db;
** '''Webserver''' – Nginx oder Apache verarbeitet PHP-Skripte.
 
** '''Datenbank''' – MySQL/MariaDB speichert und liefert Inhalte.
 
  
* Ablauf einer Anfrage:
+
Datenbank löschen.
** Nutzer ruft eine URL auf → Anfrage wird an den Webserver gesendet.
+
* drop database my_db;
** Webserver führt das PHP-Skript aus → PHP verarbeitet Eingaben.
 
** PHP stellt eine Verbindung zur MySQL-Datenbank her und holt Daten.
 
** PHP generiert HTML-Code basierend auf den Datenbankinhalten.
 
** Der HTML-Code wird an den Browser gesendet und angezeigt.
 
  
== PHP mit MySQL verbinden ==
+
In eine Datenbank wechseln.
* Verbindung zur Datenbank herstellen:
+
* use my_db;
<pre>
 
<?php
 
$servername = "localhost";
 
$username = "root";
 
$password = "passwort";
 
$dbname = "meinedatenbank";
 
  
$conn = new mysqli($servername, $username, $password, $dbname);
+
== Tabellenverwaltung ==
 +
Tabelle mit mehreren Spalten erstellen.
 +
* create table my_table (kw int(4), tests int(16), labor int(16), postiv int(16), prozent float);
  
if ($conn->connect_error) {
+
Beschreibung einer Tabelle anzeigen.
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
+
* desc my_table;
}
 
echo "Erfolgreich verbunden";
 
?>
 
</pre>
 
  
== Datenbankabfragen mit PHP ==
+
Tabelle löschen.
* Daten in die Datenbank einfügen:
+
* drop table my_table;
<pre>
 
<?php
 
$sql = "INSERT INTO nutzer (name, email) VALUES ('Max', 'max@example.com')";
 
if ($conn->query($sql) === TRUE) {
 
    echo "Neuer Datensatz erfolgreich hinzugefügt";
 
} else {
 
    echo "Fehler: " . $conn->error;
 
}
 
?>
 
</pre>
 
  
* Daten aus der Datenbank abrufen:
+
Alle Werte in einer Tabelle löschen.
<pre>
+
* truncate table my_table;
<?php
 
$sql = "SELECT id, name, email FROM nutzer";
 
$result = $conn->query($sql);
 
  
if ($result->num_rows > 0) {
+
== Daten einfügen und bearbeiten ==
    while($row = $result->fetch_assoc()) {
+
Werte in eine Tabelle einfügen.
        echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"] . "<br>";
+
* insert into my_table values(11,127457,114,7582,5.95);
    }
 
} else {
 
    echo "Keine Ergebnisse";
 
}
 
?>
 
</pre>
 
  
== Formulare und Benutzereingaben ==
+
Wert in einer Reihe ändern.
* PHP ermöglicht Interaktion durch Formulare.
+
* update my_table set labor=154 where kw=14;
<pre>
 
<form method="post" action="verarbeitung.php">
 
    Name: <input type="text" name="name"><br>
 
    Email: <input type="email" name="email"><br>
 
    <input type="submit" value="Absenden">
 
</form>
 
</pre>
 
  
* Verarbeiten der Eingaben in PHP:
+
Reihe aus der Tabelle löschen.
<pre>
+
* delete from my_table where kw=11;
<?php
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
    $name = $_POST["name"];
 
    $email = $_POST["email"];
 
   
 
    $sql = "INSERT INTO nutzer (name, email) VALUES ('$name', '$email')";
 
    if ($conn->query($sql) === TRUE) {
 
        echo "Daten erfolgreich gespeichert";
 
    } else {
 
        echo "Fehler: " . $conn->error;
 
    }
 
}
 
?>
 
</pre>
 
  
== Sicherheitsaspekte ==
+
== Daten abfragen ==
* SQL-Injections verhindern:
+
Alle Werte einer Tabelle anzeigen.
<pre>
+
* select * from my_table;
<?php
 
$stmt = $conn->prepare("INSERT INTO nutzer (name, email) VALUES (?, ?)");
 
$stmt->bind_param("ss", $name, $email);
 
$stmt->execute();
 
?>
 
</pre>
 
* Cross-Site Scripting (XSS) vermeiden:
 
<pre>
 
<?php
 
echo htmlspecialchars($row["name"]);
 
?>
 
</pre>
 
  
== Erweiterte Abfragen und Performance-Optimierung ==
+
Bestimmte Spalten ausgeben, wenn eine Bedingung erfüllt ist.
* Indexierung für schnellere Abfragen:
+
* select kw, prozent from my_table where tests > 500000;
* create index idx_kw on my_table(kw);
 
* explain select * from my_table where kw=15;
 
  
* View für häufig genutzte Abfragen:
+
Sortierte Ausgabe der Ergebnisse.
* create view kw_statistik as select kw, sum(tests) as gesamt_tests from my_table group by kw;
+
* select * from my_table where tests > 500000 order by labor;
  
== Mehr Datensicherheit und Transaktionen ==
+
Letzten Wert aus der Tabelle ausgeben.
* Sperren und Transaktionen für Datenintegrität:
+
* select * from my_table order by kw desc limit 1;
* start transaction;
 
* update my_table set labor=200 where kw=15;
 
* commit; *(statt commit auch rollback möglich)*
 
  
== Fortgeschrittene Benutzerverwaltung ==
+
== CSV-Import und -Export ==
* Benutzer mit eingeschränkten Rechten:
+
Daten aus einer CSV-Datei in die Tabelle laden.
* create user 'statuser'@'localhost' identified by 'safe123';
+
* load data infile "/var/lib/mysql-files/my.csv" into table my_table fields terminated by ',' lines terminated by '\n' ignore 1 rows;
* grant select on my_db.* to 'statuser'@'localhost';
 
  
== Dynamische Berechnungen in SQL ==
+
Daten aus einer Tabelle als CSV-Datei speichern.
* SUM(), AVG() und andere Aggregatfunktionen:
+
* select * into outfile "/var/lib/mysql-files/backup.csv" fields terminated by ',' enclosed by '"' lines terminated by '\n' from my_table;
* select avg(prozent) from my_table where tests > 500000;
 
  
* CASE-Anweisungen für bedingte Berechnungen:
+
== Backup und Wiederherstellung ==
* select kw, case when prozent > 5 then 'hoch' else 'niedrig' end as risiko from my_table;
+
Backup einer Datenbank erstellen.
 +
* mysqldump my_db > my_db.sql;
  
== Triggers und Events für Automatisierungen ==
+
Backup aller Datenbanken erstellen.
* Automatische Protokollierung bei INSERT:
+
* mysqldump --all-databases > all_dbs.sql;
 +
 
 +
Backup einer einzelnen Datenbank wiederherstellen.
 +
* mysql my_db < my_db.sql;
 +
 
 +
Backup aller Datenbanken wiederherstellen.
 +
* mysql < all_dbs.sql;
 +
 
 +
== Benutzerverwaltung ==
 +
Neuen Benutzer anlegen.
 +
* create user 'tuxman'@'localhost' identified by 'Suxer-88';
 +
 
 +
Benutzerrechte für eine Datenbank vergeben.
 +
* grant all privileges on my_db.* to 'tuxman'@'localhost';
 +
* flush privileges;
 +
 
 +
Benutzerrechte entziehen.
 +
* revoke all privileges on my_db.* from 'tuxman'@'localhost';
 +
* flush privileges;
 +
 
 +
Passwort eines Benutzers ändern.
 +
* update user set password=password('suxer') where user='tuxman';
 +
* flush privileges;
 +
 
 +
Liste aller Benutzer ausgeben.
 +
* select user from mysql.user;
 +
 
 +
== Erweiterte SQL-Funktionen ==
 +
Tabelle mit Primärschlüssel erstellen.
 +
* create table my_table (kw int(4) primary key, tests int(16), labor int(16), postiv int(16), prozent float);
 +
 
 +
Neue Spalte zur Tabelle hinzufügen.
 +
* alter table my_table add column test_p_1000 int(16);
 +
 
 +
Spalte aus einer Tabelle entfernen.
 +
* alter table my_table drop column test_p_1000;
 +
 
 +
Berechnete Spalte hinzufügen.
 +
* alter table my_table add column prozent float default (postiv / tests * 100);
 +
 
 +
Tabelle duplizieren.
 +
* create table my_new_table like my_table;
 +
 
 +
Datentyp einer Spalte ändern.
 +
* alter table my_table modify column prozent double;
 +
 
 +
Spaltennamen ändern.
 +
* alter table my_table change prozent anteil float;
 +
 
 +
== Gruppierte Abfragen ==
 +
Summenberechnung nach Gruppen.
 +
* select sum(AnzahlFall), Altersgruppe from rki_csv where Landkreis = 'SK Zweibrücken' group by Altersgruppe;
 +
 
 +
== Automatisierung mit Triggern und Events ==
 +
Automatische Protokollierung von Einträgen aktivieren.
 
* create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());
 
* create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());
  
* Zeitgesteuerte Events:
+
Regelmäßige Bereinigung alter Daten durch ein Event.
 
* create event cleanup_old_entries on schedule every 1 day do delete from my_table where kw < 10;
 
* create event cleanup_old_entries on schedule every 1 day do delete from my_table where kw < 10;
  
 
== JSON-Unterstützung in MySQL 5.7+ und MariaDB ==
 
== JSON-Unterstützung in MySQL 5.7+ und MariaDB ==
* Speichern von JSON-Daten:
+
JSON-Daten in einer Tabelle speichern.
 
* create table json_test (id int auto_increment primary key, daten json);
 
* create table json_test (id int auto_increment primary key, daten json);
  
* Abfragen innerhalb von JSON-Feldern:
+
Daten aus JSON-Feld extrahieren.
 
* select json_extract(daten, '$.name') from json_test;
 
* select json_extract(daten, '$.name') from json_test;
  
 
== Fazit ==
 
== Fazit ==
* Dynamische Webseiten ermöglichen interaktive und datenbankgestützte Anwendungen.
+
Dieses Skript fasst die wichtigsten MySQL-Befehle kompakt zusammen. Die vorgestellten Befehle ermöglichen effizientes Datenbankmanagement. Automatisierung und Optimierung können durch Trigger, Events und JSON-Unterstützung erweitert werden.
* PHP verarbeitet Benutzeranfragen und stellt Daten aus MySQL bereit.
 
* Sicherheitsmaßnahmen wie Prepared Statements und Validierungen sind essenziell.
 
* Durch Kombination mit CSS und JavaScript können erweiterte Funktionen umgesetzt werden.
 

Aktuelle Version vom 15. März 2025, 10:25 Uhr


Datenbankverwaltung

Datenbank erstellen.

  • create database my_db;

Datenbank löschen.

  • drop database my_db;

In eine Datenbank wechseln.

  • use my_db;

Tabellenverwaltung

Tabelle mit mehreren Spalten erstellen.

  • create table my_table (kw int(4), tests int(16), labor int(16), postiv int(16), prozent float);

Beschreibung einer Tabelle anzeigen.

  • desc my_table;

Tabelle löschen.

  • drop table my_table;

Alle Werte in einer Tabelle löschen.

  • truncate table my_table;

Daten einfügen und bearbeiten

Werte in eine Tabelle einfügen.

  • insert into my_table values(11,127457,114,7582,5.95);

Wert in einer Reihe ändern.

  • update my_table set labor=154 where kw=14;

Reihe aus der Tabelle löschen.

  • delete from my_table where kw=11;

Daten abfragen

Alle Werte einer Tabelle anzeigen.

  • select * from my_table;

Bestimmte Spalten ausgeben, wenn eine Bedingung erfüllt ist.

  • select kw, prozent from my_table where tests > 500000;

Sortierte Ausgabe der Ergebnisse.

  • select * from my_table where tests > 500000 order by labor;

Letzten Wert aus der Tabelle ausgeben.

  • select * from my_table order by kw desc limit 1;

CSV-Import und -Export

Daten aus einer CSV-Datei in die Tabelle laden.

  • load data infile "/var/lib/mysql-files/my.csv" into table my_table fields terminated by ',' lines terminated by '\n' ignore 1 rows;

Daten aus einer Tabelle als CSV-Datei speichern.

  • select * into outfile "/var/lib/mysql-files/backup.csv" fields terminated by ',' enclosed by '"' lines terminated by '\n' from my_table;

Backup und Wiederherstellung

Backup einer Datenbank erstellen.

  • mysqldump my_db > my_db.sql;

Backup aller Datenbanken erstellen.

  • mysqldump --all-databases > all_dbs.sql;

Backup einer einzelnen Datenbank wiederherstellen.

  • mysql my_db < my_db.sql;

Backup aller Datenbanken wiederherstellen.

  • mysql < all_dbs.sql;

Benutzerverwaltung

Neuen Benutzer anlegen.

  • create user 'tuxman'@'localhost' identified by 'Suxer-88';

Benutzerrechte für eine Datenbank vergeben.

  • grant all privileges on my_db.* to 'tuxman'@'localhost';
  • flush privileges;

Benutzerrechte entziehen.

  • revoke all privileges on my_db.* from 'tuxman'@'localhost';
  • flush privileges;

Passwort eines Benutzers ändern.

  • update user set password=password('suxer') where user='tuxman';
  • flush privileges;

Liste aller Benutzer ausgeben.

  • select user from mysql.user;

Erweiterte SQL-Funktionen

Tabelle mit Primärschlüssel erstellen.

  • create table my_table (kw int(4) primary key, tests int(16), labor int(16), postiv int(16), prozent float);

Neue Spalte zur Tabelle hinzufügen.

  • alter table my_table add column test_p_1000 int(16);

Spalte aus einer Tabelle entfernen.

  • alter table my_table drop column test_p_1000;

Berechnete Spalte hinzufügen.

  • alter table my_table add column prozent float default (postiv / tests * 100);

Tabelle duplizieren.

  • create table my_new_table like my_table;

Datentyp einer Spalte ändern.

  • alter table my_table modify column prozent double;

Spaltennamen ändern.

  • alter table my_table change prozent anteil float;

Gruppierte Abfragen

Summenberechnung nach Gruppen.

  • select sum(AnzahlFall), Altersgruppe from rki_csv where Landkreis = 'SK Zweibrücken' group by Altersgruppe;

Automatisierung mit Triggern und Events

Automatische Protokollierung von Einträgen aktivieren.

  • create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());

Regelmäßige Bereinigung alter Daten durch ein Event.

  • create event cleanup_old_entries on schedule every 1 day do delete from my_table where kw < 10;

JSON-Unterstützung in MySQL 5.7+ und MariaDB

JSON-Daten in einer Tabelle speichern.

  • create table json_test (id int auto_increment primary key, daten json);

Daten aus JSON-Feld extrahieren.

  • select json_extract(daten, '$.name') from json_test;

Fazit

Dieses Skript fasst die wichtigsten MySQL-Befehle kompakt zusammen. Die vorgestellten Befehle ermöglichen effizientes Datenbankmanagement. Automatisierung und Optimierung können durch Trigger, Events und JSON-Unterstützung erweitert werden.