Internet – Praktikum im Grundstudium: Grundlagen von SQL Nutzung von phpMyAdmin Dr. Guido Rößling Dipl.-Ing. Andreas Hartl Grundkonzepte von SQL • Relationale Datenbanken basieren auf Tabellen • Objektorientierte Datenbanken basieren auf Objekten • Wir werden „nur“ mit einer relationalen DB arbeiten – und zwar mit MySQL (www.mysql.com) • In diesem Vortrag werden die Grundkonzepte von SQL erläutert – Wichtiges Wissen über Datenbanken ist Stoff der „Datenbanken“-Vorlesungen bei Prof. A. Buchmann! – Damit können wir uns natürlich nicht vergleichen… – … aber für die „tägliche Praxis“ langt auch dieser Kurs ☺ 27.05.2004 SQL und phpMyAdmin 2 1 Grundkonzepte von SQL • SQL-Datenbanken werden in der Regel kommandobasiert gesteuert – also nicht „grafisch“ oder per Drag und Drop wie Access! • Der Nutzer muss die wesentlichen SQL-Befehle kennen • Essentiell ist folgendes Grundkonzept: – Eine Datenbank enthält (viele) Tabellen – Tabellen sind untereinander verknüpfbar (direkt / indirekt) – Einfügen, Löschen, Ändern, Suchen erfolgt durch SQL-Abfragen • Wie sehen diese Befehle aus? 27.05.2004 SQL und phpMyAdmin 3 Anlegen einer Database • Anfangs enthält die Datenbank praktisch keine Daten • Zunächst muss eine Database angelegt werden • Dort liegen dann die Tabellen – Grob ähnlich zu Java Packages ☺ • Dazu dient folgender Befehl (Schlüsselwörter fett): CREATE DATABASE [IF NOT EXISTS] name { specification } ; • Definition von specification: siehe Merkblatt • Nutzung der Datenbasis: USE name; 27.05.2004 SQL und phpMyAdmin 4 2 Anlegen einer Tabelle • Zum Anlegen einer Tabelle gibt es CREATE TABLE • Ab hier gilt folgende Notation: – [x] – {y} x ist optional nichts, y, oder eine Folge von y durch Komma getrennt • Syntax (EBNF): CREATE [TEMPORARY] TABLE [IF NOT EXISTS] name { create_definition } • create_definition hat folgendes Format: name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] • NOT NULL: Das Feld muss immer einen definierten Wert haben • DEFAULT: Vorgabe eines Standardwertes, falls nichts angegeben – Besonders hilfreich: NOT NULL + DEFAULT • AUTO_INCREMENT: Hochzählen (bei int), wenn 0 angegeben SQL und phpMyAdmin 27.05.2004 5 Typen zum Anlegen eines Feldes INT Integer-Wert, 4 Bytes Wie int in Java DOUBLE Realwert, 4 Byte Wie float in Java DATE Datumsangabe, Standard 'yyyy-mm-dd' TIME Zeitangabe 'hh-mm-ss' TIMESTAMP Systeminterne Zeitangabe 00000000000000 DATETIME Datum, dann Uhrzeit 'yyyy-mm-dd hh:mm:ss' VARCHAR(l) Zeichenkette (Länge l <= 255!) 'ccc' TEXT (Fast) beliebig langer Text "xxxx" SET(e1,e2,..) Mengenaufzählung ENUM(e1, e2,…) Aufzählung, nur ein Element wählbar 27.05.2004 SQL und phpMyAdmin Wie Checkboxen Wie Radio Buttons 6 3 Löschen vorhandener Tabellen • Tabellen werden gelöscht / entfernt mit DROP TABLE [IF EXISTS] name {, name }; • Vorsicht: die Tabelle ist dann unwiderruflich „weg“! • Der Nutzer muss die passende Berechtigung haben – Zuteilung der Rechte erfolgt durch den GRANT Befehl – Syntax und Nutzung siehe MySQL-Dokumentation 27.05.2004 SQL und phpMyAdmin 7 Einfügen in eine Tabelle • Zum Einfügen dient der INSERT Befehl: • INSERT [INTO] tableName [ ( { colName })] VALUES ( {expr | DEFAULT} ) – Hier müssen die Daten in der richtigen Reihenfolge angegeben werden • INSERT [INTO] tableName SET { colName= expr | DEFAULT }; – Die Reihenfolge ist nun egal, da die Spaltennamen angegeben werden • colName spezifiziert, welche Spalten betroffen sein sollen – Default bei Weglassen: alle Spalten 27.05.2004 SQL und phpMyAdmin 8 4 Ändern von Tabellenfeldern • UPDATE tableName SET { colName= expr } [WHERE whereClause]; • Ändert den Eintrag in Spalte colName in die Expression ab • Mittels WHERE kann spezifiziert werden, welche Einträge betroffen sein sollen – etwa nur Personen mit Alter > 65, … SQL und phpMyAdmin 27.05.2004 9 Syntax der WHERE-Anfragen • Genutzt – wie gesehen – u. a. in INSERT, UPDATE • (Sehr) umfangreiche Syntax, hier nur Auszüge: – Numerische Vergleiche mit x {<, >=, =, >=, >, !=} y • Geht auch mit Datum / Uhrzeitangaben • Es kann dabei auch gerechnet werden! (+,-,*,/,%,|,&,<<,>>) – Logische Verknüpfungen: AND bzw. &&, OR / ||, NOT / ! – Bereichsprüfungen: • value BETWEEN wert1 AND wert2 • value [NOT] IN (wert1, wert2, …) – String-Vergleiche: • x [NOT] LIKE y: Substringsuche, etwa name LIKE „%ülle%“ % dient hier als „Wildcard“ • LOCATE(x, y) Position (ab 1) von String x in y, sonst 0 27.05.2004 SQL und phpMyAdmin 10 5 Datenbankabfragen • Anfragen an die Datenbank erfolgen per SELECT: SELECT [DISTINCT] feld {, feld} FROM tabelle {id, tabelle id} [WHERE whereClause] • Bei DISTINCT wird im Fall doppelter Datensätze nur einer ausgegeben • Es kann eine beliebige Auswahl von Feldern ausgelesen werden, etwa nur vorname, alter – Alternativ Angabe von * alle Felder • Das Ergebnis ist eine (interne Ergebnis-)Tabelle – …die nur genau die abgefragten Felder enthält(!) 27.05.2004 SQL und phpMyAdmin 11 SELECT (2) • Es können auch Felder aus mehr als einer Tabelle abgefragt werden • Meist erfolgt im where eine Abstimmung zwischen den Feldern: • SELECT p.id, p.name, fibu.gehalt FROM Personen p, Finanzbuchhaltung fibu WHERE p.id = fibu.id AND p.alter > 40; • Hier gibt es zwei Tabellen: – Personen (id, name, alter, …) – Finanzbuchhaltung (id, gehalt, …) • Was besagt das Ergebnis? • WHERE kann auch auf nicht selektierten Feldern arbeiten! – Feldnamen bei SELECT sagen nur, was als Ergebnis sichtbar wird 27.05.2004 SQL und phpMyAdmin 12 6 „Dynamisches SQL“ • SQL-Befehle können auch (etwa per PHP!) generiert werden • Hier ist besonders auf korrekte Syntax zu achten • Besonders ratsam ist hier die Ausgabe des Befehls als XHTML-Kommentar (<!-- … -->) • Auf die Art kann bei einem Fehler der Befehl aus dem XHTML-Source kopiert und per phpMyAdmin „getestet“ werden 27.05.2004 SQL und phpMyAdmin 13 Was wir verschwiegen haben… • … ist ein Großteil von SQL und Datenbankkonzepten! – Vorlesungen „Datenbanken I/II“ bei Prof. A. Buchmann – Einige Details zur Steuerung der Ausgabe • Für „Experten“: ORDER BY, LIMIT, GROUP BY • Kommt beim nächsten Mal im Kontext PHP dran – Viele Datentypen – Ändern der Tabellenstruktur per ALTER TABLE • Das machen wir „bequem“ per phpMyAdmin – Rechtevergabe per GRANT (brauchen wir hier auch nicht!) – SEHR viele Optionen für WHERE, INSERT, SELECT, … • Siehe Datenbankvorlesungen und http://dev.mysql.com/doc/ 27.05.2004 SQL und phpMyAdmin 14 7 phpMyAdmin • Der Name ist Programm: – PHP-basierte Implementierung, genutzt per WWW… – … um MySQL-Datenbanken… – … zu administrieren • Datenbasen und Tabellen werden angezeigt im linken Navigationsframe • Einzelne Tabellen sind einfach modifizierbar – – – – Strukturänderung Browsen Einfügen, Löschen, Aktualisieren von Einträgen SQL-Anfragen 27.05.2004 SQL und phpMyAdmin 15 phpMyAdmin (2) • Besonders hilfreich für uns: – Einfacher Check, ob bisherige Befehle „funktionierten“ – Testen von SQL-Befehlen: • Vorab zum Experimentieren, „bis es geht“ • Nachträglich, um Fehler zu finden und zu beheben • besonders bei dynamisch zusammengestellten Befehlen! • Zusätzlich Export als CSV-Daten möglich 27.05.2004 SQL und phpMyAdmin 16 8 phpMyAdmin (3) • Links sind die Tabellen zu sehen • Das Tool ist weitgehend selbsterklärend • Besonders hilfreich: zu „grafischen“ Operationen und QBE wird SQL angezeigt 27.05.2004 SQL und phpMyAdmin 17 9