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] x ist optional {y} 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 27.05.2004 SQL und phpmyadmin 5 INT DOUBLE DATE TIME TIMESTAMP DATETIME VARCHAR(l) TEXT SET(e1,e2,..) ENUM(e1, e2, ) Typen zum Anlegen eines Feldes Integer-Wert, 4 Bytes Realwert, 4 Byte Datumsangabe, Standard Zeitangabe Systeminterne Zeitangabe Datum, dann Uhrzeit Zeichenkette (Länge l <= 255!) (Fast) beliebig langer Text Mengenaufzählung Aufzählung, nur ein Element wählbar Wie int in Java Wie float in Java 'yyyy-mm-dd' 'hh-mm-ss' 00000000000000 'yyyy-mm-dd hh:mm:ss' 'ccc' "xxxx" Wie Checkboxen Wie Radio Buttons 27.05.2004 SQL und phpmyadmin 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, 27.05.2004 SQL und phpmyadmin 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: valuebetween 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
Links sind die Tabellen zu sehen Das Tool ist weitgehend selbsterklärend Besonders hilfreich: zu grafischen Operationen und QBE wird SQL angezeigt phpmyadmin (3) 27.05.2004 SQL und phpmyadmin 17 9