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…“)
 
Zeile 1: Zeile 1:
= Dynamische Webseiten mit PHP und MySQL – Prinzip =
+
= MySQL Kompaktskript =
  
== Einführung ==
+
== Datenbankverwaltung ==
* Dynamische Webseiten generieren Inhalte zur Laufzeit, abhängig von Benutzereingaben oder Datenbankinformationen.
+
* Datenbank erstellen:
* PHP als serverseitige Skriptsprache verarbeitet Anfragen und interagiert mit einer MySQL/MariaDB-Datenbank.
+
* create database my_db;
* Im Gegensatz zu statischen HTML-Seiten können Inhalte aktualisiert, gefiltert und personalisiert werden.
 
  
== Architektur einer dynamischen Webseite ==
+
* Datenbank löschen:
* Ein typischer Aufbau besteht aus drei Hauptkomponenten:
+
* drop database my_db;
** '''Client''' – Webbrowser sendet Anfragen an den Server.
 
** '''Webserver''' – Nginx oder Apache verarbeitet PHP-Skripte.
 
** '''Datenbank''' – MySQL/MariaDB speichert und liefert Inhalte.
 
  
* Ablauf einer Anfrage:
+
* In eine Datenbank wechseln:
** Nutzer ruft eine URL auf → Anfrage wird an den Webserver gesendet.
+
* use 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 ==
+
== Tabellenverwaltung ==
* Verbindung zur Datenbank herstellen:
+
* Tabelle erstellen:
<pre>
+
* create table my_table (kw int(4), tests int(16), labor int(16), postiv int(16), prozent float);
<?php
 
$servername = "localhost";
 
$username = "root";
 
$password = "passwort";
 
$dbname = "meinedatenbank";
 
  
$conn = new mysqli($servername, $username, $password, $dbname);
+
* Beschreibung einer Tabelle anzeigen:
 +
* desc my_table;
  
if ($conn->connect_error) {
+
* Tabelle löschen:
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
+
* drop table my_table;
}
 
echo "Erfolgreich verbunden";
 
?>
 
</pre>
 
  
== Datenbankabfragen mit PHP ==
+
* Alle Werte in einer Tabelle löschen:
* Daten in die Datenbank einfügen:
+
* truncate 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:
+
== Daten einfügen und bearbeiten ==
<pre>
+
* Werte in eine Tabelle einfügen:
<?php
+
* insert into my_table values(11,127457,114,7582,5.95);
$sql = "SELECT id, name, email FROM nutzer";
 
$result = $conn->query($sql);
 
  
if ($result->num_rows > 0) {
+
* Wert in einer Reihe ändern:
    while($row = $result->fetch_assoc()) {
+
* update my_table set labor=154 where kw=14;
        echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"] . "<br>";
 
    }
 
} else {
 
    echo "Keine Ergebnisse";
 
}
 
?>
 
</pre>
 
  
== Formulare und Benutzereingaben ==
+
* Reihe löschen:
* PHP ermöglicht Interaktion durch Formulare.
+
* delete from my_table where kw=11;
<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:
+
== Daten abfragen ==
<pre>
+
* Alle Werte einer Tabelle anzeigen:
<?php
+
* select * from my_table;
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 ==
+
* Bestimmte Werte ausgeben:
* SQL-Injections verhindern:
+
* select kw, prozent from my_table where tests > 500000;
<pre>
 
<?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 ==
+
* Sortierte Ausgabe:
* Indexierung für schnellere Abfragen:
+
* select * from my_table where tests > 500000 order by labor;
* create index idx_kw on my_table(kw);
 
* explain select * from my_table where kw=15;
 
  
* View für häufig genutzte Abfragen:
+
* Letzten Wert anzeigen:
* create view kw_statistik as select kw, sum(tests) as gesamt_tests from my_table group by kw;
+
* select * from my_table order by kw desc limit 1;
  
== Mehr Datensicherheit und Transaktionen ==
+
== CSV-Import und -Export ==
* Sperren und Transaktionen für Datenintegrität:
+
* Tabelle aus CSV-Datei füllen:
* start transaction;
+
* load data infile "/var/lib/mysql-files/my.csv" into table my_table fields terminated by ',' lines terminated by '\n' ignore 1 rows;
* update my_table set labor=200 where kw=15;
 
* commit; *(statt commit auch rollback möglich)*
 
  
== Fortgeschrittene Benutzerverwaltung ==
+
* Sicherung in CSV-Datei:
* Benutzer mit eingeschränkten Rechten:
+
* select * into outfile "/var/lib/mysql-files/backup.csv" fields terminated by ',' enclosed by '"' lines terminated by '\n' from my_table;
* create user 'statuser'@'localhost' identified by 'safe123';
 
* grant select on my_db.* to 'statuser'@'localhost';
 
  
== Dynamische Berechnungen in SQL ==
+
== Backup und Wiederherstellung ==
* SUM(), AVG() und andere Aggregatfunktionen:
+
* Backup einer Datenbank:
* select avg(prozent) from my_table where tests > 500000;
+
* mysqldump my_db > my_db.sql;
  
* CASE-Anweisungen für bedingte Berechnungen:
+
* Backup aller Datenbanken:
* select kw, case when prozent > 5 then 'hoch' else 'niedrig' end as risiko from my_table;
+
* mysqldump --all-databases > all_dbs.sql;
  
== Triggers und Events für Automatisierungen ==
+
* Wiederherstellung einer Datenbank:
 +
* mysql my_db < my_db.sql;
 +
 
 +
* Wiederherstellung aller Datenbanken:
 +
* mysql < all_dbs.sql;
 +
 
 +
== Benutzerverwaltung ==
 +
* Benutzer anlegen:
 +
* create user 'tuxman'@'localhost' identified by 'Suxer-88';
 +
 
 +
* Benutzerrechte gewähren:
 +
* 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;
 +
 
 +
* Alle Benutzer anzeigen:
 +
* 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);
 +
 
 +
* Spalte hinzufügen:
 +
* alter table my_table add column test_p_1000 int(16);
 +
 
 +
* Spalte entfernen:
 +
* alter table my_table drop column test_p_1000;
 +
 
 +
* Spaltenwerte berechnen:
 +
* 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;
 +
 
 +
* Name einer Spalte ändern:
 +
* alter table my_table change prozent anteil float;
 +
 
 +
== Gruppierte Abfragen ==
 +
* Gruppierte Summenberechnung:
 +
* select sum(AnzahlFall), Altersgruppe from rki_csv where Landkreis = 'SK Zweibrücken' group by Altersgruppe;
 +
 
 +
== Automatisierung mit Triggern und Events ==
 
* Automatische Protokollierung bei INSERT:
 
* Automatische Protokollierung bei INSERT:
 
* 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:
+
* Zeitgesteuerte Bereinigung von Daten:
 
* 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 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.
* PHP verarbeitet Benutzeranfragen und stellt Daten aus MySQL bereit.
+
* Die vorgestellten Befehle ermöglichen effizientes Datenbankmanagement.
* Sicherheitsmaßnahmen wie Prepared Statements und Validierungen sind essenziell.
+
* Automatisierung und Optimierung können durch Trigger, Events und JSON-Unterstützung erweitert werden.
* Durch Kombination mit CSS und JavaScript können erweiterte Funktionen umgesetzt werden.
 

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

MySQL Kompaktskript

Datenbankverwaltung

  • Datenbank erstellen:
  • create database my_db;
  • Datenbank löschen:
  • drop database my_db;
  • In eine Datenbank wechseln:
  • use my_db;

Tabellenverwaltung

  • Tabelle 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 löschen:
  • delete from my_table where kw=11;

Daten abfragen

  • Alle Werte einer Tabelle anzeigen:
  • select * from my_table;
  • Bestimmte Werte ausgeben:
  • select kw, prozent from my_table where tests > 500000;
  • Sortierte Ausgabe:
  • select * from my_table where tests > 500000 order by labor;
  • Letzten Wert anzeigen:
  • select * from my_table order by kw desc limit 1;

CSV-Import und -Export

  • Tabelle aus CSV-Datei füllen:
  • load data infile "/var/lib/mysql-files/my.csv" into table my_table fields terminated by ',' lines terminated by '\n' ignore 1 rows;
  • Sicherung in CSV-Datei:
  • 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:
  • mysqldump my_db > my_db.sql;
  • Backup aller Datenbanken:
  • mysqldump --all-databases > all_dbs.sql;
  • Wiederherstellung einer Datenbank:
  • mysql my_db < my_db.sql;
  • Wiederherstellung aller Datenbanken:
  • mysql < all_dbs.sql;

Benutzerverwaltung

  • Benutzer anlegen:
  • create user 'tuxman'@'localhost' identified by 'Suxer-88';
  • Benutzerrechte gewähren:
  • 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;
  • Alle Benutzer anzeigen:
  • 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);
  • Spalte hinzufügen:
  • alter table my_table add column test_p_1000 int(16);
  • Spalte entfernen:
  • alter table my_table drop column test_p_1000;
  • Spaltenwerte berechnen:
  • 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;
  • Name einer Spalte ändern:
  • alter table my_table change prozent anteil float;

Gruppierte Abfragen

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

Automatisierung mit Triggern und Events

  • Automatische Protokollierung bei INSERT:
  • create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());
  • Zeitgesteuerte Bereinigung von Daten:
  • 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 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.