Kein Titel 1/2 Grundlagen der Informations- und Kommunikationstechnologie (12. Vorlesung, letzte Änderung: 18.01.2006) Relationale Datenbanksoftware Die Software für die Bibliotheksverwaltung basiert heute in der Regel auf relationalen Datenbanken. Beispiele für relationale Datenbanksoftware: Oracle Informix Gupta Sybase und im nichtkommerziellen Bereich haben sich MySQL und Postgres einen Namen gemacht. Praktische Beispiele werden wir mit MySQL realisieren. Die Datenbanksoftware relationaler Datenbanken benutzt die Client-Server-Technologie, das bedeutet, dass die Arbeit mit den Datenbanken, die das Datenbankserverprogramm verwaltet, über Datenbankclientprogramme erfolgt. Diese beiden Programme müssen sich nicht auf ein und demselben Rechner befinden. Die Programme benutzen die Internetprotokolle zur Kommunikation miteinander. Dies geschieht analog der Zusammenarbeit zwischen den WWW-Clientprogrammen (Netscape, Internet Explorer, Opera, Firefox etc.) und den WWW-Serverprogrammen (z.B. dem Apache-Server). Das einfachste Clientprogramm für den MySQL-Server ist die MySQL-Console. Wir werden diese gleich kennenlernen und auch noch ein weiteres Clientprogramm (MySQL-Front) nutzen, welches uns auf Grund der grafischen Oberfläche den Umgang mit dem Datenbankserver erleichtern wird. Die Arbeit mit den Datenbanken wird mit Hilfe der Sprache SQL (Structured Query Language) durchgeführt. Die Sprache SQL wird dabei nicht nur für die Datenbankabfragen, sondern für die gesamte Kommunikation mit derDatenbank genutzt. Sie ist ähnlich umfangreich wie es moderne Programmiersprachen sind. Wir können in der wenigen Zeit nur die wichtigsten Befehle, Statements kennenlernen. Wichtige Befehle in SQL Mit Hilfe von prompt> mysql bzw. promt> mysql -h host -u user -p starten wir die MySQL-Konsole. Im zweiten Fall wird mit der Option h auf einen Host verwiesen, mit der Option u will man als bestimmter User mit der Datenbank arbeiten und die Option p bedeutet, dass danach eine Passwort-Abfrage erscheinen wird. Wenn wir so die Konsole gestartet haben, können wir zur Eingabe der SQL-Befehle übergen. v12.htm 19.01.2006 / 02:05 Kein Titel 2/2 Mit den folgenden Befehlen werden wir uns heute beschäftigen. CREATE DATABASE name erzeugt eine Datenbank mit dem angegebenen Namen USE name öffnet die genannte Datenbank zur Nutzung DROP name Löscht die Datenbank mit dem angegebenen Namen SHOW DATABASES zeigt die Datenbanken des Servers an SHOW TABLES zeigt die Tabellen (Dateien) einer vorher mit USE ausgewählten Datenbank an CREATE TABLE name ( spaltendefinition [, spaltendefinition ...]) definiert eine Tabelle mit den betreffenden Spalten. Die Spaltendefinition enthält den Namen der Spalte, den Datentyp und evtl. spezielle zusätzliche Informationen zu der Spalte DROP tabellenname löscht die angegebene Tabelle in einer Datenbank, die vorher mit USE geöffnet wurde INSERT INTO tabellenname (spaltenname [, spaltenname ....]) VALUES (wert [, wert ...]) fügt neue Datensätze bzw. Teile von Datensätze in eine Tabelle ein. Die Reihenfolge der Spaltennamen und die Reihenfolge der Werte bestimmt den Zusammenhang DELETE FROM tablename WHERE bedingung löscht Datensätze, die die Bedingung erfüllen, aus einer Tabelle SELECT ausdruck FROM tabellenname alias [, tabellenname alias ....] WHERE bedingung selektiert Daten, die eventuell durch den Ausdruck noch verändert werden von verschiedenen Tabellen, falls bestimmte Bedingungen erfüllt sind GRANT recht [(spalten)] ON (tabellenname| * | *.* | datenbankname.*) TO benutzername [IDENTIFIED BY password] ermöglicht es sehr spezielle Rechte für Nutzer zu vergeben Die hier erwähnten Befehle haben in der Regel noch weitere Optionen. Ich habe nur die wesentlichen, häufig genutzten Strukturen hier angegeben. Der Server http://www.mysql.de/ stellt sowohl die Software als auch Handbücher und andere Dokumentationen zu MySQL zur Verfügung. Auf den nächsten beiden Seiten finden Sie weitere Sprachelemente von MySQL kurz und knapp zusammengestellt. v12.htm 19.01.2006 / 02:05 UNIX_TIMESTAMP([Datum]) FROM_UNIXTIME(UNIX_TIMESTAMP) SEC_TO_TIME(Sekunden) TIME_TO_SEC(Zeit) FOUND_ROWS() MASTER_POS_WAIT(Log-Datei, Log-Position) Zahlen formatieren FORMAT(X, D) FUNKTIONSREFERENZ Datum & Zeit DAYOFWEEK(Datum) WEEKDAY(Datum) DAYOFMONTH(Datum) DAYOFYEAR(Datum) MONTH(Datum) DAYNAME(Datum) MONTHNAME(Datum) QUARTER(DATUM) WEEK(Datum[,Beginn]) YEAR(Datum) YEARWEEK(Datum [, Beginn]) HOUR(Zeit) MINUTE (Zeit) SECO N D (Zeit) PERIOD_ADD(Zeit,Monate) PERIOD_DIFF(Zeit1,Zeit2) DATE_ADD(Datum, Zeitintervall) DATE_SUB(Datum, Zeitintervall) ADDDATE(Datum, Zeitintervall) SUBDATE(Datum, Zeitintervall) EXTRACT(Typ from Datum) TO _DAYS (DATUM) FROM DAYS(N) DATE_FORMAT(Datum,Format) TIME_FORMAT(Zeit, Format) CURDATE()* oder CURRENT_DATE()** CURTIME()* oder CURRENT_TIME()** NOW() SYSDATE() CURRENT_TIMESTEMP() * ODBC-kompatibel ** ANSI SQL kompatibel Sperren von Ressourcen Kontrollstrukturen GET_LOCK(String, Timeout) RELEASE_LOCK(String) LOCK TABLES Tabelle [AS alias] {READ | [READ LOCAL] | [LOW_PRIORITY] WRITE} [, Tabelle ...] UNLOCK TABLES IFNULL(Ausdruck1, Ausdruck2) NULLIF(Ausdruck1, Ausdruck2) IF(Ausdr1, Ausdr.2, Ausdr.3) CASE Wert WHEN [Vergleichswert] THEN Ergebnis [WHEN [Vergleichswert] THEN Ergebnis] ... [ELSE Ergebnis] END CASE WHEN [Bedingung] THEN Ergebnis [WHEN [Bedingung] THEN Ergebnis] .... [ELSE Ergebnis] END Allgemeine Funktionen Datenbanken und Anwender DATABASE() USER() SYSTEMUSER() SESSION_USER() Informationen über das System VERSION() CONNECTION_ID() BENCHMARK(Ausdruck, Anzahl) Funktionen zur Verschlüsselung PASSWORD(String) ENCRYPT(String [,Salt]) ENCODE(String, Passwort-String) Funktionen zur Entschlüsselung des_encrypt(ZuEntschlüsseln, Flag, [Schlüsselnummer | Schlüsselstring ]) des_encrypt(ZuEntschlüsseln, [ Schlüsselstring ]) Prüfsummen MD5(String) IP-Adressen wandeln INET_NTOA(Ausdruck) INET_ATON(Ausdruck) String-Funktionen ASCII(String) ORD(String) Arbeiten mit Zahlensystemen CONV(Zahl, Quellbasis, Zielbasis) BIN(Zahl) OCT(ZAHL) HEX(Zahl) CHAR(N1,...) Strings vereinigen CONCAT(String1, String2, ...) CONCAT_WS(Trenner, String1, String2, ...) Längen bestimmen LENGTH(String) OCTET_LENGTH(String) CHAR_LENGTH(String) CHARACTER_LENGTH(String) BIT_LENGTH(String) LOCATE(Substring, String, [Position]) POSITION(Substring IN String) INSTR(String, Substring) Strings auffüllen LPAD(String, Länge, Füllzeichen) RPAD(String, Länge, Füllzeichen) Arbeiten mit Teilstrings SUBSTRING(String, Position) SUBSTRING(String FROM Position [FOR Länge]) MID(String, Position, Länge) SUBSTRING INDEX(String, Trenner, Anzahl) LTRI M (String) RTRIM (String) TRIM([[ BOTH | LEADING | TRAILING ][Löschstring] FROM ] String) Informationen über zurückliegende Datenbankzugriffe SOUNDEX(String) LAST_INSERT_ID(Ausdruck) SPACE(N) Strings erzeugen/verändern REPLACE(String, Alt, Neu) REPEAT(String, Anzahl) REVERSE(String) INSERT(String, Position, Länge, NeuString) ELT(N, String1, String2, String3,...) FIELD(String1, String2, String3, ...) FIND_IN SET(String, StringListe) MAKE_SET(Bits, String1, String2, String3, ...) EXPORT_SET(Bits,an,aus,[Trenner, [Anz.]]) LOWER(String) oder LCASE(String) UPPER(String) oder UCASE(String) LOAD_FILE(Dateiname) Vergleichsoperatoren für Strings String LIKE Muster [ESCAPE 'Char' ] String NOT LIKE Muster [ESCAPE'Char'] String [NOT] REGEXP Muster String [NOT] RLIKE Muster STRCMP(String1, String2) MATCH(Spaltel, ...) AGAINST (String) MATCH(Spaltel, ...) AGAINST (String IN BOOLEAN MODE)* * erst ab Version 4.0.1 Vergleichsoperatoren = < > oder != <=> >= <= > < IS [NOT] NULL - Gleichheit - Ungleichheit - NULL-sicheres ungleich - grösser oder gleich - kleiner oder gleich - echt grösser - echt kleiner - NULL oder nicht Funktionen für Intervalle Ausdruck BETWEEN Min AND Max Ausdruck IN (Wert1, Wert2, ...) Ausdruck NOT IN (Wert1, Wert2, ...) ISNULL(Ausdruck) INTERVAL(Wert, N1, N2, ...) Bit-Operatoren I & >> << ~ - bitweise ODER - bitweise UND - Shift nach links - Shift nach rechts - bitweise Negation BIT_COUNT(N) - Anzahl gesetzter Bits Eigene Variablen Logische Operatoren NOT oder ! OR oder I AND oder && - logische Negation - logisches ODER - logisches UND SET @Variablenname = Ausdruck oder @Variablenname := Ausdruck Beispiel: SELECT @minage := min(age) FROM friends; Mathematische Funktionen Benutzer verwalten ABS (X) SIGN(X) MO D (X,Y) FLOOR(X) CEILING(X) ROUND(X,[Stellen]) EXP(X) LOG(X) LOG10(Y) POW(Basis,Exponent) SQRT(X) PI() COS(X) SIN(X) TAN(X) ACOS(X) ASIN(X) ATAN (X) COT(X) RAND([X]) LEAST(X1, X2[, X3, .., XN]) GREATEST(X1, X2[, X3,.., XN]) DEGREES(X) RADIANS(X) TRUNCATE(X,Stellen) Benutzer anlegen Funktionen zur Anwendung mit GROUP BY COUNT(Ausdruck) COUNT(DISTINCT Ausdruck, [Ausdruck]) AVG(Ausdruck) MIN(Ausdruck) MAX(Ausdruck) SUM(Ausdruck) STD(Ausdruck) STDDEV(Audruck)* BIT_OR(Ausdruck) BIT_AND(Ausdruck) * Erweiterung zu ANSI SQL. Dient der Kompatibilität zu ORACLE GRANT Privilegien [Spalten] [, Privilegien [Spaltenliste] ] ON {Tabelle | * | *.* | db_name.*} TO Anwender [IDENTIFIED BY [PASWORD] 'passwort' ] ... ] [REQUIRE [ {ssl | X=509}] [ CIPHER Algo [AND] ] [ISSUER Aufruf [AND] ] [SUBJECT Betreff] ] [WITH [GRANT OPTION | MAX QUERIES PER HOUR = # ] ] Benutzer entfernen REVOKE Privilegien [Spalten][, Privilegien [Spaltenliste]] ON {Tabelle | * | *.* | db_name.*} FROM Anwender1 [, Anwender2 ] ... Zugriffsebenen GRANT und REVOKE erlauben/nehmen den Zugriff auf mehreren Ebenen. * Global: Privilegien für alle Datenbanken * Datenbankebene: Privilegien für alle Tabellen einer DB * Tabellenebene: Privilegien für alle Spalten einer Tabelle * Spaltenebene: Privilegien für einzelne Spalten einer Tabelle Privilegientypen ALL PRIVILEGES ALTER CREATE DELETE DROP FILE INDEX PROCESS REFERENCES RELOAD SELECT SHUTDOWN UPDATE USAGE INSERT Beispiele: GRANT ALL PRIVILEGES ON *.* TO Anwender@BDServer IDENTIFIED BY'Passwort' WITH GRANT OPTION;