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…“
 
Keine Bearbeitungszusammenfassung
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.