Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie...

51
Ergänzungen und Korrekturen in MySQL mit PHP In Inhaltsverzeichnis ändern: statt: 2.1 Vorgehensweisen bei Befehlseingaben neu: 2.1 Client-Programm MYSQL aufrufen 2.1.1, 2.1.2, 2.1.3, 2.1.4 löschen statt: 2.2 Eine Datenbank anlegen und öffnen neu: 2.2 Eine Datenbank anlegen, öffnen, schließen und löschen die Punkte 2.4 bis 2.4.3 werden ersetzt: statt: 2.3 Eine Datenbank löschen neu: 2.3 Tabellen erstellen und löschen <- bisher 2.4 2.3.1 MySQL-Spaltentypen und Attribute <- bisher 2.4.1 2.3.2 Tabellen mit CREATE TABLE erstellen <- bisher 2.4.2 2.3.3 Tabellenstruktur aus vorhandener Tabelle übertragen <- neu 2.3.4 Tabellen mit DROP TABLE löschen <- bisher 2.4.3 Sollten wir den folgenden Abschnitt einfügen? 2.12 Mit dem Programm MYSQKMANAGE arbeiten neu einfügen: 2.4 Informationen zu Datenbanken, Tabellen und Datenfeldern erkunden 2.4.1 Informationen mit der Anweisung SHOW 2.4.2 Informationen mit dem Programm MYSQLSHOW 2.4.3 Informationen mit dem Programm WINMYSQLADMIN statt 4.12.1 Mustervergleich mit LIKE neu: 4.12.1 Mustervergleich mit LIKE, RLIKE und REGEXP In Inhaltsverzeichnis neuen Punkt 5.7 einfügen: 5.7 Abgeleitete Tabellen statt realer Tabellen im Join einsetzen danach ändern: statt: 5.7 Übungen neu: 5.8 Übungen statt: 5.8 Lösungen neu: 5.9 Lösungen statt: 9.3 Einfachinex erstellen neu: 9.3 Einfachindex erstellen und Tabellen reparieren In Inhaltsverzeichnis neuen Punkt 9.6 einfügen: 9.6 STORED PROCEDURE und STORED FUNCTION programmieren Seite 18 bis Seite 34 löschen. ab 2 Datenbank anlegen ... auf Seite 18 bis vor 2.5 Daten in Tabellen eingeben auf Seite 34 Stattdessen eingeben: 2 Datenbank anlegen, Tabellen definieren, Daten eingeben und verwalten

Transcript of Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie...

Page 1: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Ergänzungen und Korrekturen in MySQL mit PHP In Inhaltsverzeichnis ändern: statt: 2.1 Vorgehensweisen bei Befehlseingaben neu: 2.1 Client-Programm MYSQL aufrufen 2.1.1, 2.1.2, 2.1.3, 2.1.4 löschen statt: 2.2 Eine Datenbank anlegen und öffnen neu: 2.2 Eine Datenbank anlegen, öffnen, schließen und löschen die Punkte 2.4 bis 2.4.3 werden ersetzt: statt: 2.3 Eine Datenbank löschen neu: 2.3 Tabellen erstellen und löschen <- bisher 2.4 2.3.1 MySQL-Spaltentypen und Attribute <- bisher 2.4.1 2.3.2 Tabellen mit CREATE TABLE erstellen <- bisher 2.4.2 2.3.3 Tabellenstruktur aus vorhandener Tabelle übertragen <- neu 2.3.4 Tabellen mit DROP TABLE löschen <- bisher 2.4.3 Sollten wir den folgenden Abschnitt einfügen? 2.12 Mit dem Programm MYSQKMANAGE arbeiten neu einfügen:

2.4 Informationen zu Datenbanken, Tabellen und Datenfeldern erkunden 2.4.1 Informationen mit der Anweisung SHOW

2.4.2 Informationen mit dem Programm MYSQLSHOW 2.4.3 Informationen mit dem Programm WINMYSQLADMIN statt 4.12.1 Mustervergleich mit LIKE neu: 4.12.1 Mustervergleich mit LIKE, RLIKE und REGEXP In Inhaltsverzeichnis neuen Punkt 5.7 einfügen:

5.7 Abgeleitete Tabellen statt realer Tabellen im Join einsetzen danach ändern: statt: 5.7 Übungen neu: 5.8 Übungen statt: 5.8 Lösungen neu: 5.9 Lösungen statt: 9.3 Einfachinex erstellen neu: 9.3 Einfachindex erstellen und Tabellen reparieren In Inhaltsverzeichnis neuen Punkt 9.6 einfügen: 9.6 STORED PROCEDURE und STORED FUNCTION programmieren Seite 18 bis Seite 34 löschen. ab 2 Datenbank anlegen ... auf Seite 18 bis vor 2.5 Daten in Tabellen eingeben auf Seite 34 Stattdessen eingeben: 2 Datenbank anlegen, Tabellen definieren, Daten eingeben und verwalten

Page 2: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

In Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server in C:\MySQL und Client-Programme in C:\mysql\bin eingerichtet haben. Im einzelnen zeigen wir Ihnen in diesem Kapitel mit Beispielen, wie Sie

• eine Datenbank erstellen, • SQL-Anweisungen einsetzen, um

- Tabellen zu erstellen, - Daten in Tabellen einzugeben, - Daten abzurufen, zu ändern und zu löschen.

Bevor Sie SQL-Anweisungen eingeben können, müssen Sie mit einem Client-Programm die Verbindung zum Server herstellen. Bei der Installation werden mehrere Client-Programme eingerichtet. Das interaktive Client-Programm

MYSQL.EXE stellt die Verbindung zum Server her, gestattet die Eingabe von SQL-Befehlen sowie von MySQL-Anweisungen und zeigt deren Ergebnis an. 2.1 Client-Programm MYSQL einsetzen Mit MYSQL.EXE können Sie SQL-Befehle und andere MYSQL-Anweisungen entweder am MySQL-Prompt mysql> – im Monitor-Modus – oder am Verzeichnis-Prompt C:\MySQL\Bin> eingeben. Wenn Sie SQL-Anweisungen am Verzeichnis-Prompt eingeben wollen, müssen Sie diese zuvor in einer Textdatei speichern und dann mit ihrem Namen zusammen mit MYSQL aufrufen. Mit MYSQL den Monitor-Modus aufrufen: Mit dem Start des Programms MYSQL wird die Eingabe-Aufforderung (wir nennen diese auch MySQL-Prompt) mysql> geöffnet., hinter dem SQL-Anweisungen eingegeben werden. Verzweigen Sie zunächst in das Verzeichnis C:\MySQL\Bin durch -> Start -> Programme -> Zubehör -> Eingabeaufforderung Hinter C:\> -> CD mysql\bin eingeben Start des Programms MYSQL ohne Optionen: C:\mysql\bin>mysql Bei dieser Eingabe ohne Optionen setzen Sie voraus, dass Server und Client auf dem gleichen Rechner laufen, dass Sie noch keinen neuen Benutzer eingerichtet und noch kein Passwort vereinbart haben. In Kapitel 10 beschreiben wir, wie Sie Benutzer einrichten, Paßwörter vergeben und zum Monitor-Modus verzweigen.

Page 3: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

MYSQL-Optionen: Der Befehl MYSQL besitzt viele Optionen, die entweder in Kurzform oder in Langform eingegeben werden. Diese Optionen können Sie auf dem Bildschirm listen, indem Sie eingeben:

C:\MySQL\Bin> mysql -? <- Kurzform mit 1 Bindestrich C:\MySQL\Bin> mysql –help <- Langform mit 2 Bindestrichen

Die Optionen --host, --user und –password benötigen Sie, wenn Sie sich als Benutzer (englisch: User) mit oder ohne Passwort anmelden wollen. Start des Programms MYSQL als Benutzer root: Da das Datenbanksystem MYSQL bereits bei der Installation einen Benutzer mit dem Namen root - allerdings ohne Passwort - einrichtet, können Sie das Client-Programm MYSQL von Beginn an mit den Optionen für Host, Benutzer und Passwort in der Kurz- oder der Langform starten: kurz: mysql –h host_name –u benutzer_name –p lang: mysql –host= host_name –user=benutzer_name –password Die Angabe des Hostnamens entfällt, wenn der Server auf dem gleichen Rechner wie der Client installiert ist. Der Hostname lautet in diesem Fall localhost. Wenn Sie zum Beispiel MYSQL für den Benutzer root ohne Passwort aufrufen, geben Sie in der Kurzform ein: C:\mysql\bin> mysql -u root -p <- Leerzeichen vor -u und –p Enter password: <- keine Eingabe, RETURN Aufruf im START-Menü: Sie können den Monitor-Modus auch im START-Menü aufrufen: -> Start -> Ausführen... In Ausführen -> C:\MySQL\Bin\mysql eingeben.

Mysql1003 Das Programm MySQL.EXE öffnet die Eingabeaufforderung mysql>. Hinter mysql> geben Sie SQL-Anweisungen oder MySQL-Befehle ein:

Page 4: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Mysql1004 Client-Programm schließen: Mit den Anweisungen EXIT oder QUIT oder \q schließen Sie das Client-Programm und beenden Sie den Monitor-Modus: mysql> EXIT oder: mysql> QUIT oder: mysql> \q

Bye <- Meldung 2.2 Eine Datenbank anlegen, öffnen, schließen und löschen Datenbank anlegen: Eine Datenbank wird angelegt durch die Anweisung CREATE DATABASE datenbankname; Diese Anweisung können Sie auf mehreren Wegen dem System mitteilen. Soll zum Beispiel die Datenbank uebdb eingerichtet werden, so ist hinter der Eingabeaufforderung einzugeben: mysql> CREATE DATABASE uebdb; (CrUebdb.mys) Beachten Sie: SQL-Anweisungen, die am MySQL-Prompt eingegeben werden, sind mit Semikolon zu beenden. Gespeicherte SQL-Anweisungen: Sollen SQL-Anweisungen zu einem späteren Zeitpunkt erneut ausgeführt werden können, müssen sie diese mit einen geeigneten Editor in einer ASCII-Datei unter einem Namen speichern. Wir haben die meisten Beispiele, die in diesem Buch behandelt werden, in Textdateien mit dem Zusatz .mys gespeichert. Wir bezeichnen derart gespeicherte Anweisungen auch als Kommando-Dateien. Sie können diese Dateien von der Rowohlt-Webseite herunterladen. Die URL ist:

www.rowohlt.de/rororo/comalle/download.htm. Die Namen der gespeicherten Dateien finden Sie neben der Anweisung in runden Klammern: (CrUebdb.mys). Beachten Sie: Wenn Sie eine SQL-Anweisung in einer Textdatei zum späteren Aufruf speichern, ist das Semikolon nicht erforderlich.

Page 5: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Aufruf der Kommandodatei mit der CREATE-Anweisung: Die unter dem Namen CrUebdb.mys im Verzeichnis C:\MySQL\Bin gespeicherte Datei wird hinter der Eingabeaufforderung mit dem MySQL-Befehl

source <- Langform oder \. <- Kurzform: Backslash + Punkt aufgerufen. Der MySQL-Befehl source führt die in einer Textdatei gespeicherte SQL-Anweisung aus: mysql> source cruebdb.mys <- Langform mysql> \. cruebdb.mys <- Backslash + Punkt + Dateiname Weitere MySQL-Befehle: Wenn Sie hinter der Eingabeaufforderung mysql> den Befehl help eingeben, werden alle MySQL-Befehle aufgelistet: mysql> help <- Langform oder mysql> \h <- Kurzform: Backslash + h oder mysql> ? <- Synonym für help Liste der MySQL-Befehle: help (\h) Display this help. ? (\?) Synonym for `help'. clear (\c) Clear command. connect (\r) Reconnect to the server. Optional arguments are db and host ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to mysql server. notee (\t) Don't write into outfile. print (\p) Print current command. prompt (\R) Change your mysql prompt. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute a SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument. delimiter (\d) Set query delimiter. For server side help, type 'help all' Kommandodatei am Verzeichnis-Prompt aufrufen: Wenn Sie die in einer Textdatei gespeicherte SQL-Anweisung am Verzeichnis-Prompt starten wollen, müssen Sie hinter dem MYSQL-Befehl und vor der Kommandodatei die Umleitungsaufforderung < einfügen:

C:\mysql\bin> MYSQL [dbname] < laufwerk\pfad\textdatei Wurde die Textdatei in C:\MySQL\Bin gespeichert, so brauchen Sie den Pfad vor der gespeicherten Datei nicht zu nennen: C:\mysql\bin> mysql < cruebdb.mys oder: C:\mysql\bin> mysql –u root –p < cruebdb.mys

Page 6: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Enter password: <- keine Eingabe, RETURN Wie später dargelegt wird, können Sie auch mit Hilfe eines PHP-Programms eine Datenbank erstellen. Namensregeln: In MySQL können Namen bis zu 64 alphanumerische Zeichen des Zeichensatzes enthalten. Zusätzlich können Sie die Zeichen _ und $ verwenden. Unter UNIX kann die Länge beschränkt sein. Standard-Speicherort: Der Standard-Speicherort für die Datenbank und deren Tabellen ist bei Windows das Verzeichnis

C:\mysql\data\datenbankname Mit dem Anlegen der Datenbank uebdb wird das Verzeichnis

C:\mysql\data\uebdb eingerichtet. Datenbank öffnen: Geöffnet wird die Datenbank durch das MySQL-Kommando USE oder \u. Geben Sie diesen MySQL-Befehl mit oder ohne Semikolon ein. Im Beispielfall lautet das Kommando

mysql> USE uebdb oder mysql> \u uebdb Am Verzeichnis-Prompt lautet der Anweisungs-String: C:\mysql\bin> mysql uebdb oder C:\mysql\bin> mysql –u root –p uebdb Enter password: <- keine Eingabe, RETURN Datenbank schließen: Mit dem Beenden des Client-Programms wird auch die Datenbank geschlossen: mysql> Quit Datenbank löschen: Zum Löschen wird der Befehl

DROP DATABASE [IF EXISTS] datenbankname eingesetzt. Die alternative Eingabe IF EXISTS unterdrückt die Fehlermeldung, die angezeigt wird, wenn in dem Befehl eine nicht vorhandene Datenbank genannt wird oder die Löschungsberechtigung fehlt. DROP DATABASE löscht die Datenbank mit allen darin eingerichteten Tabellen. mysql> DROP DATABASE uebdb; Wenn das Löschkommando in einer Textdatei mit der Bezeichnung A02301.mys erfasst ist:

Page 7: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

DROP DATABASE uebdb; (A02301.mys) lautet der Aufruf an der Eingabeaufforderung mysql> mysql> \. A02301.mys und am Verzeichnis-Prompt C:\mysql\bin> mysql uebdb < A02301.mys oder C:\mysql\bin> mysql –u root –p uebdb < A02301.mys Enter password: <- keine Eingabe, RETURN 2.3 Tabellen erstellen und löschen den Abschnitt 2.4.1 übernehmen als 2.3.1 und darin berichtigen: Seite 30 Schriftgröße bei 4 an normale Größe anpassen: statt: TIMESTAMP(4) neu: TIMESTAMP(4) Seite 30 Zeile vor Allgemeine Attribute: statt: ... in Abschnitt 2.5.3 neu: ... in Abschnitt 2.5.5 den Abschnitt 2.4.2 übernehmen als 2.3.2 und darin berichtigen: Seite 32: Zeile 5 statt: auto neu: auto- Seite 32: Zeile 7 statt: Werte neu: Wert Seite 32: Zeile 12 statt: eingege neu: eingege- Seite 32 bis 33 einschließlich streichen: ab SystemInformationen auf Seite 32 bis ) ; auf Seite 33. stattdessen einfügen: Wichtig: Wenn Sie eine Datenbank mit Tabellen nicht nur zu

Übungszwecken erstellen, sollten Sie die Optimierungsvorschläge aus Kapitel 9 Datenbank optimieren berücksichtigen! In Kapitel 9 gehen wir darauf ein, wie Sie die Suchgeschwindigkeit von Daten mit dem Anlegen von Indizes erhöhen und die Datenintegrität mit der Vereinbarung von Primarschlüsseln, Fremdschlüsseln und Referenzierungen erhöhen

den Abschnitt 2.3.3 neu einfügen:

Page 8: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

2.3.3 Tabellenstruktur aus vorhandener Tabelle übertragen Mit der Anweisung CREATE TABLE neutabellenname LIKE tabellenname übertragen Sie die Struktur einer Tabelle in eine neue Tabelle. Beispiel: Die Struktur der Tabelle uebl wird in die Tabelle uebneu übertragen. mysql> CREATE TABLE uebneu LIKE uebl; Zeigen Sie die Struktur der neuen Tabelle auf dem Bildschirm an: mysql> SHOW COLUMNS FROM uebneu; den Abschnitt 2.4.3 übernehmen als 2.3.4 den Abschnitt 2.4 neu einfügen: 2.4 Informationen zu Datenbanken, Tabellen und Datenfeldern erkunden 2.4.1 Informationen mit der Anweisung SHOW Am Mysql-Prompt erhalten Sie mit der Anweisung SHOW Informationen zu Datenbanken, den Tabellen einer Datenbank und den Feldern einer Tabelle. mysql> SHOW databases; mysql> SHOW tables From datenbankname; mysql> SHOW columns FROM tabellenname FROM datenbakname; mysql> SHOW CREATE TABLE tabellenname; mysql> SHOW TABLE STATUS LIKE “tabellenname”; Das gleiche Ergebnis wie mit SHOW columns FROM tabellenname FROM datenbankname erhalten Sie mit mysql> EXPLAIN tabellenname; Beispiel: Sie informieren sich über vorhandene Datenbanken. Hinweis: Die Datenbank mysql ist bei der Installation angelegt worden. mysql> SHOW databases; Database <- Ergebnisanzeigen mysql uebdb Beispiel: Sie informieren sich über vorhandene Tabellem und Felder in der Datenbank mysql: mysql> SHOW tables FROM mysql; Tables_in_mysql columns_priv db

Page 9: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

host tables_priv user mysql> SHOW columns FROM user FROM mysql; Als Ergebnis der letzten Anweisung werden die Feldnamen, deren Typ und Informationen über Primärschlüssel und Privilegien angezeigt Beispiel: Sie informieren sich über die Datenfelder-Struktur der Tabelle uebl in der Datenbank uebdb. Öffnen Sie zuerst die Datenbank: mysql> USE uebdb Geben Sie dann den SHOW-Befehl ein:

Weitere Beispiele: mysql> SHOW CREATE TABLE uebl; Ergebnis: Anzeige der Struktur der Tabelle. mysql> SHOW TABLE STATUS LIKE “uebl”; Ergebnis: Name, Typ, Anzahl der Datensätze der Tabelle.und mehr

werden angezeigt. mysql> EXPLAIN uebl; Ergebnis: Anzeige der Struktur der Tabelle. 2.4.2 Informationen mit dem Programm MYSQLSHOW Dieses Programm wird am Verzeichnis-Prompt eingesetzt. Es informiert über Datenbanken, Tabellen, Spalten und Indizes:

MYSQLSHOW [datenbank_name [tabellen_name[spalten_name]]]

Beispiel: Er werden die in der Datenbank uebdb erstellten Tabellen genannt.

C:\MySQL\Bin> MySQLSHOW uebdb oder C:\MySQL\Bin> MySQLSHOW –u root –p uebdb

Enter password: <- keine Eingabe, RETURN Beispiel: Er werden die in der Datenbank mysql in der Tabelle user vorhandenen Felder, Schlüssel und Privilegien aufgelistet.

Page 10: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

C:\MySQL\Bin> MySQLSHOW mysql user oder C:\MySQL\Bin> MySQLSHOW –u root –p mysql user

Enter password: <-keihne Eingabe, RETURN

2.4.3 Informationen mit dem Programm WINMYSQLADMIN Systeminformationen können Sie auch mit Hilfe des Programms WinMySQLadmin abrufen. Bei der Installation von MySQL wird es implementiert und bei jedem Start des Rechners automatisch aktiviert. Sie rufen es in der Starter-Leiste mit dem Klicken des eingeblendeten Symbols und Show me auf oder im Verzeichnis C:\Mysql\Bin mit der Eingabe von WinMySQLAdmin.

my2000 Dieses Administrationsprogramm startet den MySQL-Server. Wie aus der Menü-Leiste erkennbar, liefert es eine Vielzahl von wichtigen Informationen über die von MySQL verwalteten Datenbanken. So erfahren Sie zum Beispiel die Pfadnamen der Speicherorte für eine Datenbank und deren Tabellen in dem Fenster, das Sie mit dem Register Variables aufschlagen hinter den Variablen-Namen basedir und datadir: Variable_name Values <- Auszug basedir C:\mysql\ datadir C:\mysql\data Beim Anlegem der Datenbank uebdb wurde das Verzeichnis

Page 11: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

C:\MySQL\DATA\uebdb eingerichtet, in dem jede Tabelle in drei Dateien beschrieben wird: Formulardatei: tabname.frm beschreibt u.a. Spalten, Typen mit internem Code Datendatei: tabname.MYD enthält die Tabellendaten Indexdatei: tabname.MYI enthält die Indizes Fortsetzung mit 2.5 in Seite 34 Seite 37 vor Ergebnis einfügen: Mit der Anweisung SELECT werden Daten ausgegeben. Wir beschreiben dies

ausführlich ab Kapitel 4. Seite 37 unter dem Ergebnisblock einfügen:

Wenn Sie die Anweisung SELECT * FROM uebl in der Textdatei A2101.mys – lesen Sie dazu in 2.2 die Ausführungen zu Gespeicherte SQL-Anweisungen – im Verzeichnis C:\mysql\bin gespeichert haben, dann lautet der Aufruf: mysql> \. A2101.mys

Seite 37 vor 2.5.2 einfügen: Schlüsselwerte automatisch hochzählen und LAST_INSERT_ID()

einsetzen: Mit dem Zusatz AUTO_INCREMENT werden Ganzzahlen automatisch um 1 erhöht. Im INSERT-Befehl wird anstelle eines definierten Werte NULL als Schlüsselwert eingegeben.Mit der Funktion LAST_INSERT_ID() können Sie den im Anschluss einer INSERT-Eingabe vergebenen Schlüsselwert erfragen. Erforderlich ist, dass die Tabelle einen Primärschlüssel besitzt. Wir besprechen das Anlegen eines solchen Schlüssels ausführlich in Kapitel 9. Im nachfolgenden Beispiel wird der Primärschlüssel in der Zeile PRIMARY KEY(primärschlüsselfeld) erstellt. Beispiel: Die Tabelle pers1 wird in der Datenbank uebdb angelegt und es werden Datensätze eingegeben. Mit LAST_INSERT_ID() wird der aktuelle Schlüsselwert erkundet. CREATE TABLE pers1 (A025305.mys) (persnr SMALLINT NOT NULL AUTO_INCREMENT, pname CHAR(12) NOT NULL, PRIMARY KEY (persnr) ); INSERT INTO pers1 VALUES(NULL, 'Hansen');

Page 12: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

INSERT INTO pers1 VALUES(NULL, 'Friedrich'); SELECT LAST_INSERT_ID();

Mit der SELECT-Anweisung wird 2 angezeigt, da der zuletzt in der Datei pers1 erstellte Datensatz den Primärschlüsselwert 2 enthält.

SELECT * FROM pers1; persnr pname 1 Hansen 2 Friedrich Geben Sie einen weiteren Datensatz ein:

INSERT INTO pers1 VALUES (A025306.mys) (NULL, 'Jakob'); SELECT LAST_INSERT_ID(); Mit der SELECT-Anweisung wird jetzt 3 angezeigt.

Seite 39 in Befehl LOAD DATA.. statt: [LINES TERMINATED BY ’zeichen’ (5) neu: [LINES TERMINATED BY ’zeichen’] (5) Seite 40: Darstellungen ändern: statt: <- Einfaches Anführungszeichen neu: <- Einfaches Anführungszeichen statt: <- Doppeltes Anführungszeichen neu: <- Doppeltes Anführungszeichen Seite 41: In 2.5.5 Zeile 2 und Zeile 3:: statt: und Zeit-Daten auf unterschiedliche Weise zu behandelt. Das folgen- den Beispiel stellt die Besonderheiten in MySQL dar. neu: und Zeit-Daten auf unterschiedliche Weise behandelt. Das folgen- de Beispiel demonstriert die Darstellungsmöglichkeiten in MySQL. Seite 42 in letzter Zeile von (A025501.mys) ’ anstelle von ’’ einfügen: statt: ( 990315, ’16:20’, 20001123151233,’2001-02-28 10:23:00’’,’00’); neu: ( 990315, ’16:20’, 20001123151233,’2001-02-28 10:23:00:00’); Seite 42 in Zeile 14 streichen von oder bis Enter password .... stattdessen direkt unter die vorhergehende Anweisung eingeben C:\mysql\bin> mysql –u root – p uebdb < A025501.mys Enter password: keine Eingabe, RETURN Seite 42 in vorletzter Zeile ändern: statt JJJJMMTT JJJJMMTThhmmss ’JJJJ-MM-TT hh:mm:ss’ neu JJJJMMTT JJJJMMTThhmmss JJJJMMTThhmmss Seite 42 in letzter Zeile ändern: statt JJMMTT JJMMTThhmmss ’JJJJ-MM-TT hh:mm:ss’ neu JJMMTT JJMMTThhmmss JJMMTThhmmss

Page 13: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 43: Befehl A025502.mys statt: mysql> INSERT INTO uebdz (datzeit1) VALUES (NOW(); (A025502.mys) neu: mit abschließender Klammer hinter NOW(): mysql> INSERT INTO uebdz (datzeit1) VALUES (NOW()); (A025502.mys) Seite 43 vor 2.5.6 einfügen:

Bei den Datentypen DATE und DATETIME können Sie Datumswerte bis zum Jahr 9999 verwenden. Bei TIMESTAMP können Sie nur Werte im Wertebereich 19700101000000 bis 203001010000 eingeben. Das gilt für 32-Bit-Maschinen. Bei 64-Bit-Maschinen verlängert sich der Zeitraum auf 2116. Beispiel: Es wird in die Tabelle uebdz ein Datum mit dem Jahr 2099 eingegeben. mysql> INSERT INTO uebdz VALUES (“2099-01-01“, “23:55.59“,“2099-01-01 23:55:59“,

20990101235559, 2099); Die Anzeige dieses Datensatzes erfolgt in der Spalte datzeit2 mit dem

TIMESTAMP-Typ mit 0: . dat1 zeit1 datzeit1 datzeit2 jahr 2099-01-01 23:55:59 2099-01-01 23:55:59 0000-00-00 00:00:00 2099 Seite 45 nur eine Klammer vor auswahl: statt: CREATE TABLE uebenum (A025701.mys) ((auswahl ENUM(‘gelb’, ‘grün’, ’rot’, ’schwarz’, ’weiß’)); INSERT INTO uebenum VALUES (‘gelb’, ‘grün’, ’rot’,’schwarz’, ’weiß’); neu: CREATE TABLE uebenum (A025701.mys) (auswahl ENUM(‘gelb’, ‘grün’, ’rot’, ’schwarz’, ’weiß’)); INSERT INTO uebenum VALUES (‘gelb’, ‘grün’, ’rot’,’schwarz’, ’weiß’); Seite 47 in letztem Satz vor Beispiel mit Text: statt: ... in Abschnitt 12.6 neu: ... in Abschnitt 12.7 Seite 48 in letzter Zeile vor 2.6: statt: ... in Abschnitt 12.6 für die Ausgabe von Fotos beschrieben ist. neu: ... in Abschnitt 12.7 und darin unter der Überschrift Bildausgabe beschrieben

ist. Seite 48 in letzter Anweisung: statt: Mysql> SELECT * FROM ueb9; (A02501.mys) neu: mysql> SELECT * FROM ueb9; (A02601.mys) Seite 49 vor 2.7 einfügen:

Beispiel: Wenn Sie die SELECT-Anweisung in einer Kommandodatei mit Namen A02601.mys gespeichert haben, rufen Sie diese so auf:

mysql> \. A02601.mys <- Kurzform

Page 14: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

mysql> source A02601.mys <- Langform Beispiel: Der Aufruf am Verzeichnis-Prompt lautet:

C:\MySQL\Bin> MySQL < A02601.mys C:\MySQL\Bin> MySQL -u root -p uebdb < A02601.mys Enter password: <- keine Eingabe, RETURN Wenn die Anzeige der Daten in Tabellenform erfolgen soll, starten Sie MYSQL mit der Option –t oder –table. C:\MySQL\Bin> MySQL -u root -p uebdb –t < A02601.mys Enter password: <- keine Eingabe, RETURN

Seite 51 im 1.Absatz Zeile 3: statt: ... in der die Änderungen neu: ... in der die Löschungen Zeile5: statt: Änderung neu: Löschung Zeile 6: statt: geändert neu: gelöscht Zeile 7: statt: aktualisiert neu: gelöscht Seite 56 Zeile 1 statt: erfolgt in anderen neu: erfolgt in Seite 56 Zeile 4 statt: MySQL unterstützt COMMIT/ROLLBACK (noch) nicht. neu: Auch MySQL unterstützt inzwischen COMMIT/ROLLBACK. Sie können die

Anweisungen ROLLBACK und COMMIT aber nur in transaktionssicheren Tabellen einsetzen. Mit dem Zusatz

TYPE=tabellentyp definieren Sie einen Typ. Eine ohne TYPE-Zusatz vereinbarte Tabelle wird als MyISAM-Tabelle gespeichert. Bei einer MyISAM-Tabelle – einer nicht-transaktionssicheren Tabelle - werden Aktualisierungen sofort bei der Ausführung der Anweisung auf die Platte gespeichert: Atomic Operations. MyISAM arbeitet automatisch mit der Einstellung

AUTOCOMMIT=1; Zu den transaktionssicheren Tabellentypen gehört InnoDb: TYPE=INNODB / INNOBASE

Page 15: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

In transaktionssicheren Tabellen laufen Aktualisierungen dreimal bis fünfmal langsamer. Der Grund liegt darin, dass transaktionssichere Tabellen erheblich mehr Speicherplatz benötigen und mehr CPU-Arbeit erfordern. Mit der Anweisung mysql> SHOW TABLE TYPES; erfahren Sie, welche Tabellentypen in Ihrem System verfügbar sind. Sie können allerdings auch anstelle einer Transaktion bestimmte Vorgehensweisen in MyISAM-Tabellen zur Lösung von Integritätsproblemen einsetzen. Wir gehen darauf im Anschluss an die Beispiele mit dem Einsatz einer Innodb-Tabelle ein. InnoDB-Tabelle erstellen: Es wird mit dem Zusatz TYPE=speichertyp im CREATE TABLE-Befehl die Tabelle persb als InnoDB-Tabelle erstellt:

CREATE TABLE persb (A2900.mys)

(persnr SMALLINT NOT NULL, pname CHAR(12)) TYPE=InnoDB;

Autocommit-Modus deaktivieren:

SET AUTOCOMMIT=0; (A2900a.mys) Datensatz eingeben:

INSERT INTO persb VALUES (55, ’Jung’); (A2900b.mys) Anweisung zurücknehmen: ROLLBACK; (A2900c.mys) Ergebnis anschauen: SELECT * FROM persb; (A2900d.mys)

Ergebnis: Es wird kein Datensatz angezeigt. Beispiel mit Speicherung der Eingabe: Geben Sie nochmals die Anweisungen A2900a.mys und A2900b.mys ein und dann statt ROLLBACK COMMIT; (A2900e.mys) Ergebnis: Es wird der Datensatz angezeigt. MyISAM-Tabelle in INNODB-Tabelle umwandeln: Sie können auch eine MyISAM-Tabelle mit ALTER in einen anderen Typ umwandeln.

Beispiel: Die MyISAM-Tabelle persname wird erstellt. Es werden Daten eingegeben. CREATE TABLE persname (A2901.mys) (pname CHAR(15)); INSERT INTO persname VALUES (‘Hansen’);

Page 16: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Beispiel: Die MyISAM-Tabelle Persname wird in eine INNODB-Tabelle

umgewandelt. ALTER TABLE persname TYPE=Innodb; (A2901a.mys)

Befehle mit BEGIN einleiten: Um zwei (oder mehrere) Anweisungen in einer Transaktion zu verarbeiten, werden die Befehle mit BEGIN (oder BEGIN WORK) eingeleitet:

Beispiel: In die Innodb-Tabelle persname wird ein neuer Datensatz

eingegeben, anschließend geändert, aber nicht gespeichert. SET AUTOCOMMIT=0; (A2901b.mys) BEGIN; INSERT INTO persname VALUES (’Neu’); UPDATE persname SET pname=’Alt’ WHERE pname = ‘Neu’; ROLLBACK; SELECT * FROM persname; Seite 56 ab Zeile 6 bis Zeile 13 streichen von: Bei bestimmten Situationen können Sie jedoch anstelle .. bis geben. Stattdessen einfügen:

Lösungen bei Integritätsproblemen in MyISAM-Tabellen: In bestimmten Situationen können Sie Integritätsprobleme auch in MyISAM-Tabellen lösen und damit den Vorteil der höheren Verarbeitungsgschwindigkeit erhalten. So kann es sinnvoll sein, neue Werte statt mit einer absoluten Zahl mit einer arithmetischen Operation einzugeben. In vielen Fällen hilft das Sperren mit LOCK TABLES.

Seite 56 Zeile 13: statt: Beispiel: In einer ... neu: Beispiel für die Eingabe einer arithmetischen Operation: In einer... Seite 57 in der 7.letzten Zeile: statt: Beispiel: neu: Beispiel mit Zugriffssperrung: Seite 59 Hinweis: Trigger ab Version 5.1 Seite 59 in der Tabelle UE2102 und darin in Spalte uegehalt: statt: 4239,50 999999,00 neu: 4239,50 999999,00 Seite 97 Zeile 10 Semikolon ergänzen: statt: SELECT CurDate() neu: SELECT CurDate(); Seite 97 ab Zeile 13

Page 17: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

statt: In Abschnitt 4.8 gehen wir eingehend auf die in MySQL einsetzbaren arithmetischen Operatoren ein, in Abschnitt 4.9 und 4.10 auf die in MySQL einsetzbaren Funktionen.

neu: In Abschnitt 4.11.3 gehen wir eingehend auf die in MySQL einsetzbaren arithmetischen Operatoren ein, ab Abschnitt 4.8 auf die in MySQL einsetzbaren Funktionen.

Seite 98 unter (A4922.mys) ergänzen: statt: dann neu: dann TageInFirma: Seite 98 vor Erläuternde Kommentare einfügen ergängen: Mehrere Anweisungen in eine Zeile schreiben Sie können auch mehr als eine einzige Anweisung in eine Zeile schreiben: mysql> SELECT VERSION(); SELECT 5 + 4; SELECT NOW(); Eine Befehlseingabe abbrechen Mit der Eingabe von \c wird eine Befehlseingabe gelöscht: mysql> SELECT 5 + 6

-> \c mysql> Wenn Sie eine Anweisung, die mit Anführungsstrichen zu beenden ist, ohne

diese abbrechen wollen, müssen Sie das fehlende “ vor \c schreiben. Der Hinweis darauf wird mit “> angezeigt. Beispiel:

mysql> SELECT “String ohne beendendes Anführungszeichen; “> “\c

mysql> Entsprechend gehen Sie vor, wenn die Folgezeile mit einem oder zwei Hochkommata eingeleitet wird: ’> oder ’’>. Seite 107 vor 4.6 einfügen:

Benutzer-Variablen zur Abfrage einsetzen: Benutzer-Variablen definieren Sie mit einem @ als erstem Zeichen: @gehaltsgrenze

Das Zeichen @ geben Sie mit der Tastenkombination AltGr plus Q/@ ein, oder indem Sie

die Taste >Alt> festhalten, 0 auf dem Ziffernblock drücken und den Code 64 eingeben. Beispiel: Sie wollen wissen, welche Mitarbeiter weniger als 2500 Euro

verdienen.

Page 18: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

mysql> SELECT @gehaltsgrenze:=2500; (A4408.mys) mysql> SELECT pname, gehalt FROM persdat WHERE gehalt < @gehaltsgrenze; Ergebnis: Meieris und Meyer werden mit je 2450 Euro angezeigt. Beispiel: Sie wollen wissen, welche Mitarbeiter die niedrigsten und die höchsten Gehälter beziehen. mysql> SELECT @ugrenze:=MIN(gehalt), (A4409.mys) @ogrenze:=MAX(gehalt) FROM persdat; mysql> SELECT pname, gehalt FROM persdat WHERE gehalt = @ugrenze OR

gehalt = @ogrenze; Ergebnis: Es werden Meieris, Meyer und Meier genannt.

Seite 110 im letzten Absatz das Prädikat ergänzen: statt: sowie der Mitarbeiter Meier. neu: sowie der Mitarbeiter Meier genannt. Seite 116 vor Wenn Sie die Anzahl ... einfügen: In Abschnitt 7.4 beschreiben wir, wie Sie Daten gruppieren. Im Vorgriff darauf setzen wir die GROUP BY-Klausel mit COUNT(*) ein, um die Anzahl der in den Abteilungen tätigen Mitarbeiter zu erhalten. SELECT abtnr, COUNT(*) FROM persdat (A4706a.mys) GROUP BY abtnr; Ergebnis: In Abteilung 1 ist ein Mitarbeiter tätig, in 2 sind es zwei, in 3 drei und

in 4 zwei. Sie können die Abfrage auch auf die männlichen Mitarbeiter beschränken: SELECT abtnr, geschlecht, COUNT(*) (A4706b.mys) FROM persdat WHERE geschlecht = ‘M’ GROUP BY abtnr, geschlecht; Ergebnis In den Abteilungen 1, 2 und 4 ist jeweils ein Mitarbeiter tätig, in

Abteilung 3 sind es zwei. Seite 118 (A4712.mys), (A4713.mys) bis Ergebnis: 8190 streichen Stattdessen einfügen:

Bei der bitweisen AND-Verknüpfung müssen beide Bits gesetzt sein, um das Ergebnis 1 zu erzeugen: 1 + 1 ergibt 1 0 + 1 ergibt 0 Bei der bitweisen OR-Verknüpfung wird das Ergebnis 1 sowohl mit 2 gesetzten Bits als auch mit einem gesetzten Bit erzielt: 1 + 1 ergibt 1 0 + 1 ergibt 1

Page 19: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Beispiel: Sie erstellen die Tabelle bitv und testen darin die BIT_AND und die BIT_OR-Werte. Dazu werden nacheinander in die Spalte zz die Werte 3 (dual: 0011), 2 (dual: 0010) 3 und 1 (dual: 0001) eingegeben:

mysql> CREATE TABLE bitv (zz SMALLINT);

mysql> INSERT INTO bitv VALUES(3); mysql> SELECT * FROM bitv; Ergebnis: 3

mysql> SELECT BIT_AND(zz) FROM bitv; Ergebnis: 3 mysql> SELECT BIT_OR(zz) FROM bitv;

Ergebnis: 3 mysql> INSERT INTO bitv VALUES(2); mysql> SELECT * FROM bitv;

Ergebnis: es werden für zz die Werte 3 und 2 genannt. mysql> SELECT BIT_AND(zz) FROM bitv; Ergebnis: 2 Erläuterung: 3 ist dual 0011

2 ist dual 0010 BIT_AND ergibt 0010 <- 2 mysql> SELECT BIT_OR(zz) FROM bitv;

Ergebnis: 3 Erläuterung: 3 ist dual 0011

2 ist dual 0010 BIT_OR ergibt 0011 <- 3

mysql> INSERT INTO bitv VALUES(1);

mysql> SELECT * FROM bitv; Ergebnis: es werden für zz die Werte 3, 2 und 1 genannt.

mysql> SELECT BIT_AND(zz) FROM bitv; Ergebnis: 0 Erläuterung: Ergebnis aus 3 AND 2 ist dual 0010

1 ist dual 0001 BIT_AND ergibt 0000 <- 0 mysql> SELECT BIT_OR(zz) FROM bitv;

Ergebnis: 3 Erläuterung: Ergebnis aus 3 OR 2 ist dual 0011

1 ist dual 0001 BIT_OR ergibt 0011 <- 3 Seite 118 vor 4.9 einfügen:

Bitoperatoren &, |, >> und >>: Mit diesen Operatoren werden die eingegebenen Dezimalzahlen entsprechenden Bits der Dualzahl bearbeitet. Mit dem Operator & wird die bitweise UND-Verknüpfung (AND) erreicht, mit dem Operator | die ODER-Verknüpfung (OR). Wie oben beschrieben müssen bei AND beide Bits gesetzt sein, um das Ergebnis 1 zu erzeugen, bei der OR das Ergebnis 1 sowohl mit 2 gesetzten Bits als auch mit einem gesetzten Bit erzielt. Die Operatoren >> und << verschieben Bits nach rechts oder links.

Page 20: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Operator entspricht Beispiele: Ergebnis: & UND-Verknüpfung: SELECT 5 & 1 <- 1

Schnittmenge 5=1001 1=0001 UND: 1=0001

| ODER-Verknüpfung: SELECT 5 | 1 <- 5 Vereinigungsmenge 5=1001 1=0001 ODER: 5=1001

>> Rechtsverschiebung SELECT 63 >> 5 <- 1 63=111111 5 nach rechts <- 000001=1 << Linksverschiebung SELECT 7 << 1 7= 0111 1 Position nach links <- 1110=14

BIT_COUNT(): Die Funktion BIT_COUNT() gibt die Anzahl gesetzter Bits zurück: Dualzahl: Anzahl gesetzter Bits SELECT BIT_COUNT(1) 0001 1 SELECT BIT_COUNT(4) 0100 1 SELECT BIT_COUNT(3) 0011 2 Beispiel: Sie haben eine Tabelle besuche, in der die Datumswerte aller Tage stehen, an denen Sie besucht worden sind. mysql> CREATE TABLE besuche (A4720.mys) (jahr YEAR(4), monat INT(2) UNSIGNED ZEROFILL, tag INT(2) UNSIGNED ZEROFILL); mysql> INSERT INTO besuche VALUES (2002,1,1),(2002,1,2), (2002,2,1),(2002,2,1); Wenn Sie die Anzahl der Besuchstage mit der Funktion COUNT() ermitteln, werden alle Datensätze berücksicht igt, auch doppelte Tage: mysql> SELECT jahr, monat, COUNT(tag) AS Anztage (A4721.mys) FROM besuche GROUP BY jahr, monat;

Ergebnis: jahr monat Anztage

2002 01 2 2002 02 2

Mit den Funktionen BIT_COUNT und BIT_OR werden doppelte Tage nicht mitgezählt. In der Klammer wird der Bit_Operator << eingesetzt. Er bewirkt die Linksverschiebung der Bit-Positionen: mysql> SELECT jahr, monat, BIT_COUNT(BIT_OR(1<<tag)) (A4722.mys) AS Anztage FROM besuche GROUP BY jahr, monat; Ergebnis: jahr monat Anztage

2002 01 2 2002 02 1

Das gleiche Ergebnis erreichen Sie auch mit dem Zusatz DISTINCT: mysql> SELECT jahr, monat, DISTINCT(COUNT(tag)) (A4723.mys) AS Anztage FROM besuche GROUP BY jahr, monat;

Page 21: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 120 in Anweisungen A4903b bis A4903d Semikolon ergänzen: statt: SELECT NOW() (A4903b.mys) (1) SELECT NOW() + 0 (A4903c.mys) (2) SELECT SYSDATE() (A4903d.mys) (1) neu: SELECT NOW(); (A4903b.mys) (1) SELECT NOW() + 0; (A4903c.mys) (2) SELECT SYSDATE() ; (A4903d.mys) (1) Seite 122 Anweisungen zur Bestimmung der Kalenderwoche ändern: statt: SQL-Anweisung Ergebnis SELECT WEEK(’2002-01-01’) 1 SELECT WEEK(’1977-01-01’) 0 SELECT WEEK(’1978-01-01’) 1 In Deutschland beginnt die Zählung der Kalenderwochen eines Jahres mit der ersten Woche, die mindestens 4 Tage besitzt. Die erste Woche mit weniger als 4 Tagen wird zur letzten Kalenderwoche des Vorjahres gezählt. Deshalb ist das Ergebnis zum 1.1.1978 falsch. neu: SQL-Anweisung Ergebnis SELECT WEEK(’2002-01-01’,1); 1 (1.1. = Dienstag) SELECT WEEK(’1977-01-01’,1); 0 (1.1. = Samstag) SELECT WEEK(’1978-01-01’,1); 0 (1.1. = Sonntag) In Deutschland beginnt die Zählung der Kalenderwochen eines Jahres mit der ersten Woche, die beginnend mit Montag mindestens 4 Tage besitzt. Die erste Woche mit weniger als 4 Tagen wird zur letzten Kalenderwoche des Vorjahres gezählt. Seite 122 in den folgenden Abfragen Semikolon setzen: statt: Abfrage Ergebnis SELECT DAYofMonth(‘2002-7-23’) 23 SELECT DAYofYEAR(‘2002-7-23’) 204 SELECT QUARTER(‘2002-07-23’) 3 neu: Abfrage Ergebnis SELECT DAYofMonth(‘2002-7-23’); 23 SELECT DAYofYEAR(‘2002-7-23’); 204 SELECT QUARTER(‘2002-07-23’); 3 Seite 123 in den folgenden Abfragen Semikolon setzen:: statt: Abfrage Ergebnis SELECT EXTRACT(MONTH FROM ’2002-05-23 12:33:55’) 5 SELECT EXTRACT(DAY_MINUTE FROM ’2002-05-23 12:33:55’) 231233 neu: Abfrage Ergebnis SELECT EXTRACT(MONTH FROM ’2002-05-23 12:33:55’); 5 SELECT EXTRACT(DAY_MINUTE FROM ’2002-05-23 12:33:55’); 231233

Page 22: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

statt: Abfrage Ergebnis SELECT EXTRACT(HOUR FROM ’2002-05-23 12:33:55’) 12 SELECT EXTRACT(DAY_HOUR FROM ’2002-05-23 12:33:55’) 2312 neu: Abfrage Ergebnis SELECT EXTRACT(HOUR FROM ’2002-05-23 12:33:55’); 12 SELECT EXTRACT(DAY_HOUR FROM ’2002-05-23 12:33:55’); 2312 Seite 123 statt: In Abschnitt 4.10.12 erfahren Sie, welche Type-Konstanten eingesetzt werden neu: In Abschnitt 4.10.2 erfahren Sie, welche Type-Konstanten eingesetzt werden Seite 128 in A4923.mys Leerzeichen zwischen SELECT und (TO.DAYS

setzen.Semikolon setzen statt: Abfrage (A4923.mys) JahreInFirma SELECT(TO_DAYS(’2002-3-22’) – TO_DAYS(‘1999-07-20’)) / 365 AS JahreInFirma

2.67

neu: Abfrage (A4923.mys) JahreInFirma SELECT (TO_DAYS(’2002-3-22’) – TO_DAYS(‘1999-07-20’)) / 365 AS JahreInFirma;

2.67

Seite 128 in A4923a.mys Semikolon setzten: statt: Abfrage (A4923a.mys) JahreInFirma SELECT FLOOR((TO_DAYS(’2002-3-22’)–TO_DAYS(‘1999-07-20’)) / 365) AS JahreInFirma

2

neu: Abfrage (A4923a.mys) JahreInFirma SELECT FLOOR((TO_DAYS(’2002-3-22’)–TO_DAYS(‘1999-07-20’)) / 365) AS JahreInFirma;

2

Seite 128 vor Zur Berechnung von Monatsdifferenzen... einfügen: Wenn die Datumswerte in einer Variablen und das aktuelle Datum in der Funktion CURDATE() gespeichert stehen, kann die Jahresdiffernz auch mit dem Einsatz der Funktionen YEAR() und RIGHT() errechnet werden. Die Funktion RIGHT() beschreiben wir in 4.11.1. Beispiel: Es wird die Betriebszugehörigkeit in Jahren für den Mitarbeiter mit der Personalnummer 1 ermittelt, der am 1.2.1980 eingetreten ist. Das aktuelle Datum sei der 5.3.2005.

SELECT persnr, eintritt, CURDATE(), (A4923b.mys) (YEAR(CURDATE())-YEAR(eintritt)) (1) - (RIGHT(CURDATE(),5) < RIGHT(eintritt,5)) AS jahre (2) FROM persdat WHERE persnr = 1;

Ergebnis: persnr curdate() eintritt jahre 1 2005-03-05 1980-02-01 25

Page 23: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

(1) Die Differenz aus YEAR(2005-03-01) – YEAR(1980-02-01) ist die Differenz zwischen 2005 und 1980, also 25.

(2) Die Funktionen RIGHT() enthalten die Werte RIGHT(03-05) < RIGHT(02-01) Da der 5.3. nicht kleiner ist als der 1.2. wird als Ergebnis 0 ermittell. Das bedeutet, dass das unter (1) errechnet Ergebnis nicht geändert wird. Beispiel: Es wird die Betriebszugehörigkeit in Jahren für den Mitarbeiter mit der Personalnummer 5 ermittelt, der am 15.5.1985 eingetreten ist. Das aktuelle Datum sei der 5.3.2005.

SELECT persnr, eintritt, CURDATE(), (A4923c.mys) (YEAR(CURDATE())-YEAR(eintritt)) (1) - (RIGHT(CURDATE(),5) < RIGHT(eintritt,5)) AS jahre (2) FROM persdat WHERE persnr = 5;

Ergebnis: persnr curdate() eintritt jahre 1 2005-03-05 1985-05-15 19

(1) Die Differenz aus YEAR(2005-03-01) – YEAR(1985-05-15) ist die Differenz zwischen 2005 und 1985, also 20.

(2) Die Funktionen RIGHT() enthalten die Werte RIGHT(03-05) < RIGHT(05-15) Da der 5.3. kleiner ist als der 15..5. wird als Ergebnis 1 ermittell. Das bedeutet, dass das unter (1) errechnet Ergebnis um 1 vermindert wird: 20 – 1 = 19. Seite 129 in A4924.mys hinter SELECT SEC_TO_TIME zusätzliche Klammer: statt: Abfrage (A4924.mys) Zeitdifferenz SELECT SEC_TO_TIME(HOUR('17:40:20') * 3600 + MINUTE('17:40:20') * 60 + SECOND('17:40:20')) - (HOUR('10:10:30') * 3600 + MINUTE('10:10:30') * 60 + SECOND('10:10:30'))) AS Zeitdifferenz;

07:29:50

neu: Abfrage (A4924.mys) Zeitdifferenz SELECT SEC_TO_TIME((HOUR('17:40:20') * 3600 + MINUTE('17:40:20') * 60 + SECOND('17:40:20')) - (HOUR('10:10:30') * 3600 + MINUTE('10:10:30') * 60 + SECOND('10:10:30'))) AS Zeitdifferenz;

07:29:50

Seite 130 großes Y statt y: statt: Abfrage Ergebnis SELECT DATE_FORMAT(’2002-03-05’, ’%W in der %u.Woche %y’);

Tuesday in der 10.Woche 2002

neu: Abfrage Ergebnis SELECT DATE_FORMAT(’2002-03-05’, ’%W in der %u.Woche %Y’);

Tuesday in der 10.Woche 2002

Seite 135 . Komma vor ’Fritz’ entfernen und mit Semikolon abschließen: statt: Abfrage Ergebnis SELECT ‚’Fritz’, SPACE(8), ‘Heinz’, SPACE(8), ‘Olav’ Fitz Heinz Olav neu: Abfrage Ergebnis SELECT ’Fritz’, SPACE(8), ‘Heinz’, SPACE(8), ‘Olav’; Fitz Heinz Olav

Page 24: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 135 . Komma vor ’Allabballa’ entfernen, mit Semikolon abschließen: statt: SELECT REPEAT(’NRW’, 3) NRWNRWNRW SELECT REPLACE(‚’Allaballa’, ‘la’, ‘i’); Alibali

neu: SELECT REPEAT(’NRW’, 3); NRWNRWNRW SELECT REPLACE(’Allaballa’, ‘la’, ‘i’); Alibali

Seite136: statt: Abfrage Ergebnis SELECT LTRIM(’Hans’) Hans SELECT RTRIM(’Hans’) Hans SELECT TRIM(’Hans’); Hans neu : Abfrage Ergebnis SELECT LTRIM(’ Hans ’) Hans SELECT RTRIM(’ Hans ’) Hans SELECT TRIM(’ Hans ’); Hans Seite 140 Semikon ergänzen, in Ergebnisspalte Punkt statt Komma und , entfernen: statt: SELECT POW(729,1/3) 9 SELECT EXP(1) 2,718282 SELECT EXP(1) 2,718282 SELECT LOG10(2) 0,3010, neu: SELECT POW(729,1/3); 9 SELECT EXP(1); 2,718282 SELECT EXP(1); 2.718282 SELECT LOG10(2); 0.301030 Seite 141 Semikolon ergänzen: statt: SELECT GREATEST(5,7,3.33) 7.00 SELECT LEAST(5,7,3.33) 3.33 neu: SELECT GREATEST(5,7,3.33); 7.00 SELECT LEAST(5,7,3.33); 3.33 Seite 142 Semikolon ergänzen: statt: SELECT IF(5/2,’größer 0’,’kleiner 0’) größer 0 SELECT IF(0/2,’größer 0’,’kleiner 0’) Kleiner 0 neu: SELECT IF(5/2,’größer 0’,’kleiner 0’); größer 0 SELECT IF(0/2,’größer 0’,’kleiner 0’); Kleiner 0 Seite 142 Semikolon ergänzen und NULL statt Null: statt:

Page 25: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

SELECT IF(5/2,’größer 0’,’kleiner 0’) größer 0 SELECT IFNULL(NULL,’Ausdruck1 ist NULL’) Ausdruck1 ist Null neu: SELECT IF(5/2,’größer 0’,’kleiner 0’); größer 0 SELECT IFNULL(NULL,’Ausdruck1 ist NULL’); Ausdruck1 ist NULL Seite 143 Semikolon ergänzen: statt: SELECT INTERVAL(2,7,9,12) 0 SELECT INTERVAL(15-4,7,9,12) 2 neu: SELECT INTERVAL(2,7,9,12); 0 SELECT INTERVAL(15-4,7,9,12); 2 Seite 144 statt 4.12.1 Mustervergleich mit LIKE neu: 4.12.1 Mustervergleich mit LIKE, RLIKE und REGEXP Seite 145 vor 4.12.2 neu einfügen: Erweiterte Mustervergleiche können Sie mit den Operatoren REGEXP und

NOT REGEXP durchführen. Synonym dafür verwenden Sie RLIKE und NOT RLIKE. Platzhalter:

Platzhalter: Funktion: [ ] steht für einen Zeichenbereich . steht für ein beliebiges Zeichen,

Zusätzlich können Sequenzen eingesetzt werdem: ^ definiert den Zeichenketten-Anfang $ definiert das Zeichenketten-Ende Beispiele: Welche Name der Mitarbeiter beginnen mit “m“? Ab Version 3.23.4 muss man Klein- und Großschreibung nicht mehr unterscheiden.

Abfrage (A41101a.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “^m”;

Meieris, Meyer, Meier

Welche Namen der Mitarbeiter enden mit “t“?

Abfrage (A41101b.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “t$”;

Volt, Luft

Sie können auch mehr als 1 Zeichen vor $ einsetzten:

SELECT ... REGEXP “er$“;

Page 26: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Welche Namen bestehen aus ’Me er’ und einem beliebigen Buchstaben?

Abfrage (A41102a.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “Me.er$”;

Meyer, Meier

Welche Namen bestehen aus nur 4 Zeichen? Abfrage (A41103a.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “^....$”;

Bind, Volt, Luft

Sie können diese Abfrage auch so formulieren: SELECT ... REGEXP “^.{4}$“; Welche Namen enthalten den Buchstaben “i“? Abfrage (A41103c.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “[i]”;

Bind, Meieris, Eifer, Meier

Das gleiche Ergebnis liefert auch SELECT ... REGEXP “i“;

Welche Namen enthalten die Buchstaben “e“ oder “i“ oder “m“? Abfrage (A41103d.mys) Ergebnis SELECT pname FROM persdat WHERE pname REGEXP “[eim]”;

Bind, Meieris, Strom, Meyer, Eifer, Meier

Seite 146 in A41105.mys Datumsformat ändern:: statt: Abfrage (A41105.mys) Ergebnis SELECT pname FROM persdat WHERE eintritt BETWEEN ('01.01.1984') AND ('31.12.1985');

Bind, Luft, Meier,Strom

neu: Abfrage (A41105.mys) Ergebnis SELECT pname FROM persdat WHERE eintritt BETWEEN '1984-01-01' AND '1985-12-31';

Bind, Luft, Meier,Strom

Seite 149 in der unterlegten SQL-Anweisung den Dateinamen (A4131.mys) hinter die Zeile CREATE TEMPORY ... schreiben und nicht hinter WHERE gahalt = minimum; Seite 150 eine Zeile streichen: statt: SELECT * FROM mingehalt;

SELECT pname FROM mingehalt: SELECT minimum FROM mingehalt;

neu: SELECT * FROM mingehalt; SELECT minimum FROM mingehalt;

Seite 150 vor 4.15 einfügen: In Kapitel 6 zeigen wir, wie Sie temporäre Tabllen anstelle von Subqueries einsetzen.

Page 27: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 152 unter UE41515 ergänzen: Beachten Sie: Wenn Sie die SQL-Anweisungen am MySQL-Prompt eintippen, müssen Sie jeden Befehl mit einem Semikolon beenden. Das ist nicht notwendig, wenn Sie die Anweisungen in Dateien zum Beispiel mit den Bezeichnungen UE41501.mys bis UE41515.mys speichern. Seite 158 in letzter ZeileTrennung tbez und tpreis mit Komma (nicht Punkt): tarten ta tbez, tpreis ta,tartnr Seite 158 vor Beispiel 2 einfügen: Bei der Auflistung der JOIN-Tabellen hinter FROM können anstelle der in

FROM persdat p, fmitglieder f, vwgrade v eingesetzten Kommata auch Schlüsselwörter mit dem gleichen Ergebnis verwendet werden:

FROM persdat p JOIN fmitglieder f JOIN vwgrade v oder: FROM persdat p JOIN fmitglieder f,vwgrade v oder: FROM persdat p CROSS JOIN fmitglieder f,vwgrade v oder: FROM persdat p INNER JOIN fmitglieder f,vwgrade v

FROM persdat p STRAIGHT_JOIN fmitglieder f,vwgrade v Bei der Verwendung von STRAIGHT_JOIN wird das System gezwungen, die Tabellen in der vom Programmierer eingegebenen Reihenfolge abzuarbeiten. Seite 161: (2) unter (1) plazieren. statt: SELECT p.persnr, pname, fmnr, vwgrad, vorname (A5601a.mys) FROM persdat p Left Join fmitglieder f (1) USING (persnr); (2) neu: SELECT p.persnr, pname, fmnr, vwgrad, vorname (A5601a.mys) FROM persdat p Left Join fmitglieder f (1) USING (persnr); (2) Seite 161 unter 5601.mys einfügen: oder: SELECT p.persnr, pname, fmnr, vwgrad, vorname (A5601c.mys) FROM persdat p Natural Left [Outer] Join fmitglieder f; (4) Seite 161 unter (3) Obwohl der Spaltennamen....einfügen: (4) Mit NATURAL LEFT [OUTER] JOIN werden automatisch die in beiden Tabellen gemeinsamen Spalten angesprochen. Seite 163 in (A5603.mys) Komma hinter vorname streichen: statt: SELECT p.persnr, pname, abtname, (A5603.mys)

Page 28: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

vwgrad, vorname, neu: SELECT p.persnr, pname, abtname, (A5603.mys) vwgrad, vorname Seite 164 Anweisung (A5701.mys) mit Semikolon beenden. mann.gehalt = frau.gehalt; Seite 165 vor Übungen einfügen:

5.7 Abgeleitete Tabellen statt realer Tabellen im Join einsetzen Eine abgeleitete Tabelle (englisch: derivated table) wird in der SELECT- Anweisung hinter FROM vereinbart. In der Spaltenliste dieser SELECT- Anweisung müssen die Schlüssel-Felder genannt werden, mit denen die

Tabellen-Verknüpfung vereinbart wird und alle Felder, die angezeigt werden sollen.

Beispiel: Die Mitarbeiter mit Familienmitgliedern sind anzuzeigen. Lösung mit realer Tabelle FMITGLIEDER:

SELECT p.persnr, pname, vorname (A5710.mys)

FROM persdat p, fmitglieder f WHERE p.persnr = f.persnr;

Lösung mit abgeleiteter Tabelle FMITGLIEDER:

SELECT p.persnr, pname, vorname (A5710A.mys) FROM persdat p, (SELECT persnr, vorname FROM fmitglieder) f WHERE p.persnr = f.persnr; Als Ergebnis werden die Familienmitglieder von Meier, Volt, Luft und Meyer

und deren Vornamen angezeigt. Seite 165: statt: 5.7 Übungen neu: 5.8 Übungen Seite 167 ab Zeile 8 zwei Absätze streichen: ab: In MySQL laufen ... bis: gen, wie es geht. stattdessen einfügen: In MySQL laufen Subqueries in SELECT-Abfragen ab Version 4.1. Wir gehen

nachfolgend auch darauf ein, wie Sie alternativ mit Joins und temporären Tabellen die Aufgabenstellung lösen können.

Seite 167 letzten Absatz sterichen: ab: Ab welchem Release .. bis: in Abschnitt 6.6. stattdessen einfügen: Das Einbetten von SELECT-Unterabfragen in UPDATE-Anweisungen

beschreiben wir in Abschnitt 6.6. Seite 169 in (A6101.mys) streichen:

Page 29: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

lnn Seite 169 letzte Zeile bis 170 streichen: von: Solange in .. bis: poräre Tabellen erstellen. neu: Anstelle der Unterabfrage können Sie auch eine tempoäre Tabelle anlegen

und deren Daten anschließend aufrufen. In Abschnitt 4.14 haben wir beschrieben, wie Sie temporäre Tabellen erstellen.

Seite 171 in (A6102.mys) streichen: lnn Seite 172 in (A6201.mys) streichen: lnn Seite 173 in (A6202.mys) streichen: lnn Seite 174 ändern: statt: Die folgende Übersicht zeigt ... an. neu: Übersicht: Wirkungsweise der Operatoren mit ALL: Seite 175 in (A6303.mys) streichen: lnn Seite 176 in (A6204.mys) streichen: lnn Seite 177 in (A6206.mys) streichen: lnn Seite 179 in (A6302.mys) streichen: lnn Seite 180 in (A6303.mys) streichen: lnn Seite 181 in (A6304.mys) streichen: lnn Seite 182 in (A6305.mys) streichen: lnn Seite 183 in (A6307.mys) streichen: lnn Seite 184 in (A6401.mys) streichen: lnn Seite 187 in Anweisung A6501.mys ändern: statt: gehaltfzu NUMERIC, pdeckung NUMERIC

Page 30: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

neu: gehaltfzu DECIMAL(8,2), pdeckung DECIMAL(8,2) Seite 189 in (A6601.mys) streichen: lnn Seite 190 in A6602.mys das vorangehende O streichen: statt O: UPDATE persdat A neu: UPDATE persdat A Seite 190 letzten Absatz vor 6.6.2 streichen von: Sie sollten ... bis: können. stattdessen einfügen:

Diese in anderen Datenbanken mögliche Anweisung läuft auch in MySQL Version 5 nicht.

Seite 191 in (A6603.mys) streichen: lnn

Seite 192 in 4.letzter Zeile statt Januar Februar einfügen: statt: und tposten die Leistungswerte aus dem Monat Januar... neu: und tposten die Leistungswerte aus dem Monat Februar... Seite 194 in UE6903 hinter ...Operator IN. ergänzen: neu: Lösen Sie die Aufgabe in MySQL auch mit einem LEFT JOIN. Seite 194 die Anweisung CREATE TABLE ziel mit Semikolon abschließen: ); Seite 195 in (UE6901.mys) streichen: lnn Seite 195 in UE6902t.mys AND ergänzen in folgenden Zeilen: statt: jahr = 2002 monat = 1 neu: jahr = 2002 AND monat = 1 AND Seite 196 in (UE6903.mys) streichen: lnn Seite 200 vorletzte Zeile: statt: ... wird in Kapitel 10 behandelt. neu: ... wird in Kapitel 9 behandelt. Seite 210 in dritt- und zweitletzter Zeile statt: ...Eintrittsterminen zwischen 1.1.80 und 1.1.86 ... neu: ...Eintrittsterminen nach dem 1.1.80 und vor dem 1.1.86 ... Seite 221 in UE7606 Darstellung ändern: statt: WHERE p.persnr = a.persnr AND

Page 31: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

p.abtnr = 4 neu: WHERE p.persnr = a.persnr AND p.abtnr = 4 Seite 222 ersten Abasatz ändern: statt: Ab welchem Release ... bis: ... vereinbart werden. streichen Stattdessen eingeben: Ab Release 5.01 können Sichten in MySQL erstellt werden. Wir zeigen

nachfolgend aber auch, wie Sie mit temporären Tabellen oder mit einer Anweisungsfolge ähnliche Ergebnisse erzielen.

Seite 222 in der sechsletzten Zeile ändern: statt: Mit Einschränkungen kann man mit Views... Man kann sie neu: In anderen Datenbanken kann man mit Views, die Zugriff nur auf eine einzige

Tabelle haben oder die ohne GROUP BY-Klausel und ohne Unterabfragen angelegt sind, in der gleichen Weise arbeiten wie mit Basistabellen. Mann kann Daten

Seite 223 in der 4.Zeile ergänzen: Achtung: Version 5.1 abwarten!! In MySQL ist dies derzeit noch nicht möglich.

. Seite 223 unter der vierten Zeile neuen Absatz einfügen: CREATE VIEW-Syntax in MySQL: CREATE [OR REPLACE] VIEW viewname [(spaltenliste)] AS SELECT anweisung [WITH CHECK OPTION]

Der optionale Zusatz OR REPLACE bewirkt, dass eine vorhandene Sicht ersetzt wird. Der Prüfzusatz WITH CHECK OPTION kann eingegeben werden. WITH CHECK OPTION soll bei Eingaben neuer Datensätze mit INSERT verhindern, dass falsche Werte in eine definierte Spalte geschrieben werden. Da Eingaben in Sichten mit INSERT derzeit noch nicht möglich sind, wird WITH CHECK OPTION ignoriert.

Seite 223 streichen: ab: Vorteile von Sichten bis werden. Seite 223 unter 8.1 als erstes Beispiel einfügen: Beispiel ohne Tabellenzugriff: Die Werte Hans und die arithmetische

Operation 5*3 werden in der Sicht ohne gespeichert. SELECT VIEW ohne (A8100.mys) AS SELECT ‘Hans’, 5*3;

Die Anzeige der Daten mit SELECT * FROM ohne; lautet

Page 32: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Hans 5*3 Hans 15 Sicht mit OR REPLACE-Option und Spaltenüberschriften:

SELECT OR REPLACE VIEW (A8100B.mys) ohne (vname, ergebnis) AS SELECT ‘Hans’, 5*3;

Die Anzeige der Daten mit SELECT * FROM ohne; lautet jetzt:

vname ergebnis Hans 15 Seite 223 in (A8101.mys) streichen lnn Seite 225 in (A8101S.mys) mit Semikolon abschließen: SELECT * FROM gehalt1; Seite 226 Zeile 5 bis 6 streichen: von Sobald Sichten ... bis ... beide Lösungen. Seite 226 in (A8102.mys) streichen lnn Seite 226 in (A8102.mys) mit Semikolon abschließen:

GROUP BY aufnr; Seite 226 Satz ändern: statt. In MySQL lautet die Anweisung neu: Mit einer temporären Tabelle lautet die Anweisung: Seite 226 in (A8102A.mys) mit Semikolon abschließen:

ORDER BY aufnr; Seite 227 in erster Zeile ändern: statt: Zusammenfassung: neu: Einfacher Datenaufruf: Seite 227 Zeile 8: statt: Speichern Sie ... neu: speichern Sie ... Seite 227 Zeile 10 Leerzeichen einfügen: statt: mysql>.\A81025S.mys neu: mysql>.\ A81025S.mys Seite 227 Absatz streichen von Eine temporäre Tabelle ....

Page 33: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

bis A4131.mys beschrieben. stattdessen eingaben:

Mit der SHOW-Anweisung erfahren Sie, welche Ergebnisse die angelegte Sicht erbringen soll:

mysql> SHOW CREATE VIEW auftrab; Seite 227 unter Beispiel: Die Sicht auftrab wird gelöscht. ändern: statt: DROP VIEW auftrab lnnn neu: DROP VIEW auftrab; (A8301.mys) Seite 227 die beiden letzten Zeilen streichen: von In MySQL... bis DROP TABLE auftrab (A8103.mys) Seite 228 letzter Satz streichen von: Die Zusätze im CREATE TABLE ... bis: nicht ausgeführt. stattdessen eingeben: In MySQL können Sie die referentielle Inegrität nur in INNODB-Tabellen verwirklichen. In Abschnitt 2.9.1 haben wir diesen Tabellentyp beschrieben. Seite 230: statt: 9.3 Einfachindex erstellen neu: 9.3 Einfachindex erstellen und Tabellen reparieren Seite 230 Text hinter Beispiel eränzen: statt: Es wird die indexierte Tabelle tind mit zwei Datensätzen erstellt. neu: Es wird die indexierte Tabelle tind mit zwei Datensätzen ohne UNIQUE-Zusatz

erstellt. Seite 234 Zeile 12 vor Mit dem Dienstprogramm... Überschrift einfügen: Tabellen mit MyISAMCHk reparieren Seite 235 hinter dem ersten Satz in Zeile 2 streichen und ergänzen: statt: rieren. Wenn Sie ... neu rieren: MYISAMCHK [optionen] tabellenname-mit_pfad_zu_datenbankdirectory

Optionen in MYISAMCHK(): Die Option –help (zwei Bindestriche!) oder alternativ -h (1 Bindestrich) setzen Sie ein, um die verfügbaren Optionen aufzulisten: C:\MySQL\Bin> myisamchk –help

Zu den Prüf- und Reparatur-Optionen zählt --RECOVER <- Recover findet nahezu alle Fehler, ausgenommem

UNIQUE-Schlüssel, die keine sind

Page 34: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

und weitere Optionen, die festlegen, welche Datenbankdateien bearbeitet werden sollen: --QUICK <- prüft Indexdateien, --FAST <- bearbeitet inkorrekt geschlossene Dateien, --CHANGED <- bearbeitet zusätzlich Dateien, die nach der letzten

Prüfung geändert worden sind, --MEDIUM <- sucht gelöschte Links,

--EXTENDED <- bearbeitet alle Fehler. Seite 235 Zeile 2 und 3 den Satz löschen Wenn Sie dies ... ein: stattdessen eingeben: Beispiel: Sie reparieren die Indexdatei von tbeg.myi. dann in der Anweisung zwischen quick und C ein Leerzeichen einfügen: statt: C:\MySQL\Bin> myisamchk –recover –quickC:\Mysql\Data\Testdb\tbeg.myi neu: C:\MySQL\Bin> myisamchk –recover –quick C:\Mysql\Data\Testdb\tbeg.myi

Seite 235 vor 9.4 Zusammengesetzten Index vereinbaren einfügen:

Tabellen mit Befehlen am MySQL-Prompt reparieren: Anstelle von MYISAMCHK können Sie andere Anweisungen zum Reparieren fehlerhaften Tabellen einsetzen. Wir nennen anschließend die wichtigsten Kommandos:

CHECK TABLE verwenden Sie bei MyISAM- und InnoDB –Dateien (InnoDB vgl.Abschnitt 2.9.1): mysql> CHECK TABLE tabellenname [,tabellenname...][option [option...]];

Als Optionen setzen Sie wie weiter oben beschrieben QUICK, FAST, CHANGED, MEDIUM oder EXTENDED ein. Ohne Optionszusatz entspricht

CHECK TABLE tabellenmname der Anweisung MYISAMCHK –RECOVER - MEDIUM. Mit CHECK TABLE werden viele Informationen angezeigt. In der letzten Zeile sollte OK stehen. Wenn dies nicht der Fall ist setzen Sie CHECK TABLE mit der Option EXTENDED ein.

REPAIR TABLE kann nur für MyISAM-Tabellen eingesetzt werden. Die Anweisung entspricht weitgehend dem Befehl MYISAMCHK –R tabellennane, der den Vorzug vor REPAIR TABLE haben sollte.

mysql> REPAIR TABLE [LOCAL/NO_WRITE_TO_BINLOG] tabellenname[,tabellenname...] [QUICK] [EXTENDED] [USE_FRM]];

Wenn MYI-Dateien fehlen – sie definieren Tabellendaten – oder wenn Spaltenköpfe inkorrekt sind, sollten Sie die Option USE_FRM verwenden, um die Informationen aus der FRM-Datei zu nutzen, die Spalten und Typen beschreiben. Mit LOCAL oder dem Alias NO_WRITE_TO_BINLOG wird verhindert, dass die Daten in die binären Logdateien geschrieben werden.

Page 35: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

OPTIMIZE TABLE wird genutzt, wenn große Teile von Tabellen zerstört sind und wenn in VARCHAR-, BLOB- oder TEXT-Tabellen viele Änderungen durchgeführt worden sind. Die Anweisung macht nicht mehr genutzten Speicherplatz wieder verfügbar:

mysql> OPTIMIZE TABLE [LOCAL/NO_WRITE_TO_BINLOG] tabellenname[,tabellenname...];

ANALYZE TABLE analysiert wie MYISAMCHK –analyze die Verteilung der Schlüssel und verbessert den Leistungsgrad bei Joins.

Seite 236 ab 2.Zeile bis Zeile 6 streichen: von: CONSTRAINT <- zwangsweise Bindungen bis: bellen angelegt: ... stattdessen eingeben: In MySQL sind FOREIGN KEY-Bindungen derzeit nur in INNODB-Tabellen

implementiert. Ab Version 5.1 soll die referentielle Integrität auch in anderen Tabellen-Typen unterstützt werden. Zu unterscheiden sind bei den FOREIGN KEY-Bindungen die übergeordnete Tabelle – die Parenttabelle – und die abhängige – die Dependenttabelle -. Der oder die Schlüssel in der Parenttabelle müssen Primärschlüssel sein. In der Dependenttabelle müssen die FOREIGN KEY-Spalten indiziert sein. Ab Version 4.1 erfolgt die Indizierung automatisch. Die Datentypen der korrespondierenden Spalten in FOREIGN KEY und in der referenzierten Parenttabelle müssen gleich sein, bei Integertypen auch in der Größe. Syntax in Dependent-Tabelle: [CONSTRAINT symbol] FOREIGN KEY (indizierte_schlüsselspalte] REFERENCES parent-tabellenname (primärschlüsselspalte) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

Seite 237: Die Anweisungen (A09501.mys) so ersetzen:

CREATE TABLE abt (A09501.mys) (abtnr SMALLINT NOT NULL, abtname CHAR(12), PRIMARY KEY(abtnr)

) TYPE=INNODB; INSERT INTO abt VALUES(1, 'Leitung'); INSERT INTO abt VALUES(2, 'Verwaltung');

Seite 237: Die Anweisungen (A09502.mys) so ersetzen:

CREATE TABLE pers (A09502.mys) (persnr SMALLINT NOT NULL, pname CHAR(12), pabtnr SMALLINT NOT NULL, INDEX ipabtnr (pabtnr),

Page 36: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

FOREIGN KEY (pabtnr) REFERENCES abt(abtnr) ON DELETE RESTRICT)

TYPE=INNODB; INSERT INTO pers VALUES (10, 'Meier', 1); INSERT INTO pers VALUES (4, 'Strom', 2); INSERT INTO pers VALUES (9, 'Bind', 2);

Seite 237 letzten Satz ändern: statt: In MySQL wird ... neu: Die Speicherung des Datensatzes wird mit einer Fehlermeldung abgewiesen. Seite 237: Unter (A09503.mys) einfügen. ON DELETE-Regeln

Diese Regeln setzen Sie hinter REFERENCES ein. Wenn Sie die Beispiele nachvollziehen, müssen Sie jeweils die vorher mit einer anderen DELETE-Regel eingesetzte Tabelle von pers löschen. Die Parenttabelle können Sie nur löschen, wenn Sie zuvor die Dependenttabelle entfernt haben.

ON DELETE RESTRICT: In der Tabelle abt können keine Datensätze

gelöscht werden, so lange in pers Datensätze mit der gleichen Abteilungsnummer stehen:

DELETE FROM abt WHERE abtnr = 1; Fehlermeldung!

ON DELETE CASCADE: Beim Löschen eines Datensatzes in der Tabelle abt

werden automatosch alle Datensätze mit gleichem Referenzwert in der Dependenttabelle gelöscht:

DELETE FROM abt WHERE abtnr = 2; Die Datensätze mit der Personalnummern 4 und 9 in pers werden ebenfalls gelöscht.

ON DELETE SET NULL: Diese Regel können Sie nur dann einsetzen, wenn

Sie in der abhängigen Tabelle die Spalte pabtnr nicht mit NOT NULL deklariert haben. CREATE TABLE pers (persnr SMALLINT NOT NULL, pname CHAR(12), pabtnr SMALLINT, INDEX ipabtnr (pabtnr), FOREIGN KEY (pabtnr) REFERENCES abt(abtnr)

ON DELETE SET NULL) TYPE=INNODB; INSERT INTO pers VALUES (10, 'Meier', 1); INSERT INTO pers VALUES (4, 'Strom', 2); INSERT INTO pers VALUES (9, 'Bind', 2); Beim Löschen eines Datensatzes in der Tabelle abt

Page 37: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

DELETE FROM abt WHERE abtnr = 2; werden in der abhängigen Tabelle in der Spalte pabtnr die Datensätze mit der Personalnummer 4 und 9 auf NULL gesetzt.

ON DELETE SET DEFAULT: Diese Regel kann eingesetzt werden, wird aber ignoriert. ON DELETE NO ACTION: In der Tabelle abt können keine Datensätze gelöscht werden, so lange in pers Datensätze mit der gleichen Abteilungsnummer stehen:

DELETE FROM abt WHERE abtnr = 2;

Fehlermeldung! Beispiel: Die Tabelle pers ist mit der Regel ON DELETE RESTRICT

angelegt. In pers wird im Datensatz mit der Personalnummer 4 der Wert von pabtnr von 2 auf 1 gesetzt.

UPDATE pers SET pabtnr = 1 (A09502u.mys) WHERE persnr = 4; Das System führt diese Anweisung aus, weil in der Parenttabelle abt der Wert

1 vorhanden ist. Beispiel: Die Tabelle pers ist mit der Regel ON DELETE RESTRICT angelegt. In pers wird im Datensatz mit der Personalnummer 4 der Wert von pabtnr von 1 auf 5 gesetzt.

UPDATE pers SET pabtnr = 5 (A09502u.mys) WHERE persnr = 4; Das System führt diese Anweisung nicht aus, weil in der Parenttabelle abt der

Wert 5 nicht vorhanden ist. Achtung: UPDATE-Regeln bewirken nichts!! Version 5.1 abwarten. ON UPDATE-Regeln CREATE TABLE pers (A09502e.mys) (persnr SMALLINT NOT NULL, pname CHAR(12), pabtnr SMALLINT NOT NULL, INDEX ipabtnr (pabtnr), FOREIGN KEY (pabtnr) REFERENCES abt(abtnr)

ON DELETE RESTRICT ON UPDATE RESTRICT) TYPE=INNODB; INSERT INTO pers VALUES (10, 'Meier', 1); INSERT INTO pers VALUES (4, 'Strom', 2); INSERT INTO pers VALUES (9, 'Bind', 2);

Page 38: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 237 hinter dem lezten Satz ... noch akzeptiert. einfügen Wenn Sie nicht mit INNODB-Tabellen arbeiten wollen und noch nicht die

Version 5.1 installiert haben, können Sie in Tabellen den Datentyp ENUM – vgl.2.5.7 – einsetzen. Damit bewirken Sie zwar nicht die Zurückweisung eines Datensatzes mit einem unerwünschten Wert, Sie verhindern aber dessen Eingabe. Beispiel: Die Tabelle pers wird mit dem ENUM-Feld abtnr erstellt und es werden Datensätze eingegeben. CREATE TABLE perse (A09504.mys) (persnr SMALLINT NOT NULL, pname CHAR(12), abtnr ENUM ('1','2') NOT NULL, PRIMARY KEY (persnr) ); INSERT INTO perse VALUES (10, 'Meier', 1); INSERT INTO perse VALUES (4, 'Strom', 2); INSERT INTO perse VALUES (9, 'Bind', 2); Beispiel: Ein Datensatz mit dem im ENUM-Feld nicht zugelassenen Wert 3 wird eingegeben.

INSERT INTO perse VALUES(22, ’Heinrich’,3); (A09503.mys) Query OK, 1 row affected, 1 warning Ergebnis: Der Datensatz wird akzeptiert, in das Feld abtnr wird der Wert 3

aber nicht eingetragen.

Referenzierung ohne FOREIGN KEY: Eine Referenzierung zwischen der Tabelle perse und der noch anzulegenden Tabelle hemd erreichen Sie auch ohne FOREIGN KEY, indem Sie in der Tabelle hemd einen Schlüssel mit der Referenz zum Primärschlüssel persnr der Tabelle pers anlegen:

rpersnr SMALLINT UNSIGNED NOT NULL REFERENCES pers(persnr) Legen Sie für das folgende Beispiel am MySQL-Prompt die Tabelle hemd an: CREATE TABLE hemd (A09507.mys)

(hnr SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, hemdart ENUM ('Langarm','Kurzarm','Sport') NOT NULL, farbe ENUM ('rot','blau','grau') NOT NULL, rpersnr SMALLINT UNSIGNED NOT NULL REFERENCES pers(persnr), PRIMARY KEY (hnr)); INSERT INTO hemd (A09508.mys) VALUES (NULL,'Langarm', 'blau', 4);

INSERT INTO hemd VALUES (NULL,'Kurzarm', 'rot', 4); INSERT INTO hemd VALUES (NULL, 'Sport', 'grau', 10);

Beispiel: Es werden alle Spalten aus der Tabelle hemd angezeigt, die Strom aus der Tabelle pers betreffen. SELECT pname, h.* FROM pers p, hemd h (A09509.mys)

WHERE pname = 'Strom' AND

Page 39: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

h.rpersnr = p.persnr; pname hnr Hemdart farbe rpersnr <-Ergebnis Strom 1 Langarm blau 4 Strom 2 Kurzarm rot 4 Erläuterung: Mit h.* werden alle Spalten der Tabelle hemd ausgewiesen.

Wenn Sie zusätzlich zu dem gesuchten Namen auch dessen Personalnummer kennen, erzielen Sie das gleiche Ergebnis mit

SELECT pname, h.* FROM pers p, hemd h

WHERE pname = 'Strom' AND rpersnr = 4; Seite 239 Zeile 1 den Satz Ein anonymer .... ändern statt: Ein anonymer Benutzer kann kein Passwort vereinbaren. neu: Ein anonymer Benutzer kann keinen neuen Benutzer anlegen und kein

Passwort vereinbaren. Seite 239 ZEILE 6 vor Wir wollen einen neuen Benutzer... einfügen. Bei der Installation des Datenbanksystems wird automatisch der

Administrator-Benutzer root angelegt. Testen Sie dies: C:\mysql\bin> mysql –u root mysql> SELECT user()

user() root@localhost

Der Administrator-Benutzer root kann neue Benutzer anlegen und Passwörter vergeben.

Seite 237 vor Kapitel 10 neu einfügen: 9.6 STORED PROCEDURE und STORED FUNCTION programmieren Ab Version 5.0 können Sie STORED PROCEDURE und STORED

FUNCTION einsetzen. Die Prozeduren speichern SQL-Anweisungen in kompilierter Form im Server. Sie erhöhen die Performance und Datenintegrität. Sie sind besonders für Unternehmensanwendungen geeignet. Diese Prozeduren und Funktionen sind an eine Datenbank gebunden. Der Aufruf der Datenbank erfolgt automatisch mit dem Start der Prozedur. In der Prozedur darf kein USE-Befehl eingefügt sein. Prozeduren werden mit CALL aufgerufen. Sie geben Daten aus, die Ausgabe- Variablen zugewiesen sind. Funktionen besitzen Rückgabewerte. Prozeduren und Funktionen werden im Monitor-Modus vereinbart. Beispiel für eine Prozedur mit Zugriff auf einen einzigen Datensatz: Aus der Tabelle persdat werden der Name und das Gehalt des Mitarbeiters mit der Personalnummer 3 ausgegeben. Die Personalnummer wird innerhalb der Prozedur definiert. mysql> USE testdb

Page 40: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

mysql> DELIMITER // (1) mysql> CREATE PROCEDURE persd (OUT x CHAR(12), OUT y DECIMAL(8,2) ) (2) -> BEGIN (3) -> DECLARE p SMALLINT; (4) -> SET p:=3; -> SELECT pname, gehalt INTO x, y FROM persdat WHERE persnr = p; (5) -> END; (6) -> // (1) Prozedurergebnis anzeigen: mysql> DELIMITER ; (1) mysql> CALL persd(@Name, @Gehalt); (7) mysql> SELECT @Name, @Gehalt; (8) @Name @Gehalt (9) Meyer 2450 (1) Damit das Anweisungs-Endezeichen ; innerhalb der Prozedur eingesetzt werden kann, wird für die Prozedur mit dem Befehl DELIMITER das Zeichen // vereinbart. Mit der Eingabe dieses Zeichens wird die Prozedur auch beendet. Für die Ausgabe wird das Anweisungs- Endezeichen wieder auf ; gesetzt. (2) Eiine Prozedur wird eingeleitet mit CREATE PROCEDURE prozedurname ([parameter[,...]])

Parameter sind Variablen, denen Werte zugwiesen werden. Mit den

Schlüsselwörtern IN, OUT und INOUT vor der Variablen wird definiert, ob es Eingabe-, Ausgabe oder Ein-/Ausgabe-Variablen sind. Ohne Parameter wird hinter dem Prozedurname () eingegeben. (3) BEGIN leitet die Anweisungen ein. (4) Mit DECLARE wird eine lokale Variable deklariert. Mit SET wird dieser ein Wert zugewiesen. (5) Der SELECT...INTO-Befehl speichert Spaltenwerte in Variablen: SELECT spaltenname [,...] INTO parametername [,...] FROM tabellenname WHERE-Klausel; Die SQL-Anweisung hätte ohne lokale Variable so gelautet: SELECT pname, gehalt INTO x, y FROM persdat WHERE persnr = 3; (6) END beendet die Anweisungsfolge. (7) Eine Prozedur wird mit CALL aufgerufen: CALL prozedurname ([@ausgabevariable [,...]]); In den Anweisungen zur Ausgabe des Prozedur-Ergebnisses erhalten die Variablen das Vorzeichen @. Die Namen der Variablen müsen nicht mit denen in der Prozedur übereinstimmen. (8) Das Ergebnis einer aufgerufenen Prozedur wird mit SELECT angezeigt:

Page 41: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

SELECT @ausgabevariable [, @ausgabeveriable, ...]; Die Variablen werden mit dem Zeichen @ eingeleitet.

(9) Ergebnisausgabe. SHOW Anwqeisungen SHOW CREATE PROCEDURE zeigt das vereinbarte Programm: mysql> SHOW CREATE PROCEDURE persin; SHOW PROCEDURE STATUS nennt die Charakteristiken der Prozeduren: mysql> SHOW PROCEDURE STATUS; <- alle Prozeduren mysql> SHOW PROCEDURE STATUS LIKE ‘persin’; <- Prozedur persin mysql> SHOW PROCEDURE STATUS LIKE ‘persin’\G; <- Anzeige untereinander Beispiel mit Eingabe des Variablen-Wertes außerhalb der Prozedur: Aus der Tabelle persdat werden der Name und das Gehalt des Mitarbeiters mit der Personalnummer 3 ausgegeben. Der Wert für die Personalnummer wird beim Aufruf der Prozedur eingegeben. mysql> DELIMITER // mysql> CREATE PROCEDURE persin (IN p SMALLINT, OUT x CHAR(12), OUT y DECIMAL(8,2) ) -> BEGIN -> SELECT pname, gehalt INTO x, y FROM persdat WHERE persnr = p; -> END; -> // Prozedurergebnis anzeigen: mysql> DELIMITER ; mysql> CALL persin(@p,@Name, @Gehalt); (1) mysql> SET @p:=3; (1) mysql> SELECT @Name, @Gehalt; @Name @Gehalt Meyer 2450 (1) In diesem Beispiel wird der Wert für die Personalnummer mit der Anweisung SET zugewiesen. Als Zuweisungszeichen ist := zu verwenden. Die Personalnummer kann auch direkt im CALL-Befehl vereinbart werden:

CALL persin(3,@Name, @Gehalt);

Beispiel für die Vereinbarung einer Funktion mit CREATE FUNCTION: Der Zinsbetrag aus dem Kapital k, dem Zinssatz p und den Tagen t soll hinter der Zeichenkette ’Zinsen: ’ mit der Funktion zins angezeigt werden. Funktion programmieren: mysql> DELIMITER //

mysql> CREATE FUNCTION zins (c CHAR(19), k DECIMAL(8,2), p DECIMAL(3,2), t INT, kon INT) RETURNS CHAR(50) (1)

Page 42: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

-> RETURN CONCAT(’Zinsen: ’, k*p*t/36000); (2) -> // (1) Für die Zeichenkette wird die Variable c vereinbart, für die Berechnung die Variablen

k, p, t und kon. Für den Ergebnis-Rückgabewert wird mit RETURNS eine Zeichenkette definiert.

(2) Mit RETURN werden die Rückgabewerte festgelegt. Die Funktion CONCAT wird eingesetzt, um die anzuzeigende Zeichenkette und das arithmetische Ergebnis miteinander zu verbinden.

Funktionsergebnis anzeigen: Für die Variablen k, p und t werden in unserem Beispiel die Werte 1000, 5 und 180 eingesetzt. Die Anweisung CALL wird nicht benötigt. mysql> DELIMITER ;

mysql> SELECT zins(@c,1000,5,180,@kon); zins(@c,1000,5,180,kon <- Ergebnisausgabe Zinsen: 25,00

SHOW Anweisungen SHOW CREATE FUNCTION zeigt das vereinbarte Funktionsprogramm: mysql> SHOW CREATE FUNCTION zins;

SHOW FUNCTION STATUS nennt Charakteristiken: mysql> SHOW FUNCTION STATUS; <- alle Funktionen mysql> SHOW FUNCTION STATUS LIKE ‘zins’; <- Funktion zins mysql> SHOW FUNCTION STATUS LIKE ‘zins’\G; <- Anzeige untereinander

Prozeduren und Funktionen löschen Die Struktur der Anweisung zum Löschen lautet: DROP {PROCEDURE|FUNCTION} [IF EXISTS] pname Beispiele:

mysql> DROP PROCEDURE persd; mysql> DROP FUNCTION zins;

Prozedur- und Funktionsnamen mit ALTER ändern:

mysql> ALTER PROCEDURE persin NAME persneu; mysql> ALTER FUNCTION zins NAME zinsneu; Es sind an dieser StelleBeispiele zu ergänzen für den Einsatz von Cursor: DECLARE cname CURSOR FOR sql-Befehl mit OPEN CURSOR , FETCH CURSOR usw. den Einsatz von IF, CASE, LOOP, WHILE, ITERATE und LEAVE. Seite 239 ab Zeile 8 bis Seite 240 Zeile 3 streichen von: Benutzername vereinbaren: ... bis schnitt 10.3 ausführlicher besprechen.

Page 43: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Stattdessen eingeben: Benutzer anlegen: Man kann Benutzer mit und ohne Passwort anlegen.Ein Benutzername darf maximal 16 Zeichen enthalten.

Beispiel: Der Benutzer root erstellt den neuen Benutzer aneu. Vereinbaren

Sie mit dem SQL-Befehl GRANT, den wir ausführlich in Abschnitt 10.3 besprechen, den Namen des neuen Benutzers und weisen Sie ihm

Zugriffsberechtigungen für alle Datenbanken und Tabellen zumit ALL *.*. Er soll nur vom lokalen Host aus arbeiten können. Starten Sie als Benutzer root, der noch kein Passwort besitzt: C:\MySQL\Bin> mysql –u root

mysql> GRANT ALL ON *.* TO aneu@localhost; Beispiel: Der Administrator-Benutzer root vereinbart den Benutzer mkfg und

teilt diesem das Passwort kg zu. mkfg erhält mit dem Befehl GRANT alle Berechtigungen bei Zugriffen vom lokalen Host. Starten Sie als Benutzer root.

(so wie auf Seite 240 dargestellt: C:\MySQL\Bin> mysql –u root

mysql> GRANT ALL ON *.* TO mkfg@localhost (A10101.mys) IDENTIFIED BY kg WITH GRANT OPTION; ) Seite 241 in Zeile 7 das Wort Beispiel: streichen und ersetzen: statt: Beispiel: neu: Problem: Seite 241 in Zeile 8 ändern: statt: ... haben Sie als Benutzer... neu ... haben Sie den Benutzer ... Seite 241 in Zeile 10 das Wort Problem: streichen. Seite 241 in Zeile 12 bis 14 streichen ab: ... Der Administrator-Benutzer root wird ... bis machen. Seite 241 unter 2. ändern: statt: Sie öffnen den Monitor als anonymer Benutzer mit einer leeren Zeichenkette: neu: Sie öffnen den Monitor als anonymer Benutzer Seite 241 unter 2. streichen: C:\MySQL\Bin> SET user = ““ und ändern: statt: C:\MySQL\Bin> mysql –p neu: C:\MySQL\Bin> mysql Seite 241 den Punkt 3. streichen. Seite 241 den Punkt 4. umbenennen in Punkt 3. Seite 242 in Zeile 7 hinter ... Passwort zuzuweisen.

Page 44: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

statt zuzuweisen neu: zuzuweisen, da bei der Installation root passwortfrei bleibt und deshalb jeder

diesen Superbenutzer einsetzen kann. Seite 242 in Zeile 7 streichen. Wir weisen rt zu: Darunten nach einer Freizeile eingeben: Beispiel mit GRANT: Dem passwortfreien Administrator-Benutzer root wird

das Passwort rt mit dem Befehl GRANT zugewiesen. Starten Sie dazu als Benutzer root:

C:\mysql\bin> MySQL –u root mysql> GRANT ALL ON *.* TO root@localhost (A10102.mys) IDENTIFIED BY “rt” WITH GRANT OPTION; Beispiel mit UPDATE: Dem passwortfreien Administrator-Benutzer root wird

das Passwort rt mit dem Befehl UPDATE zugewiesen. Starten Sie dazu als Benutzer root und öffnen Sie die integrierte Datenbank mysql, in der die Berechtigungstabelle USER gespeichert ist. Sie müssen bei dieser Vorgehensweise nach der Ausführung des UPDATE-Befehls die Anweisung FLUSH PRIVILEGES eingeben, damit die Änderung durchgeführt wird. Lesen Sie dazu auch 10.2.

C:\mysql\bin> mysql –u root mysql mysql> UPDATE user SET password=PASSWORD(‘rt’) WHERE user=’root’; mysql> FLUSH PRIVILEGES; Passwort aberkennen: Sie können dem Administrator-Benutzer root das

Passwort rt mit dem Befehl GRANT oder dem Befehl UPDATE wieder aberkennen:

Beispiel mit GRANT: C:\mysql\bin> mysql –u root -p Enter password: rt mysql> GRANT ALL ON *.* TO root@localhost IDENTIFIED BY “”; Beispiel mit UPDATE: C:\mysql\bin> mysql –u root –p mysql Enter password: rt mysql> UPDATE user SET paasword=PASSWORD(“”’) WHERE user=’root’; mysql> FLUSH PRIVILEGES; Sie können ein Passwort auch mit dem Befehl SET setzen oder ändern.

Page 45: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Beispiel: Das Passwort rt für den Benutzer root wird gelöscht und stattdessen rtneu vereinbart.

C:\mysql\bin> MySQL –u root -p Enter password: <- rt eingeben

mysql> USE mysql Database changed mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘rtneu’);

Seite 242 vor 10.2 einfügen: Hinweise zum Passwörtern: Passwörter sollten für Eindringlinge möglichst

schwierig zu erkunden sein. Andererseits sollten sie dem Benutzer im Gedächtnis bleiben. Es gibt Techniken, um diese Ziele zu erreichen: Vermeiden Sie Klartext-Kennwörter oder Wörterbuch-Wörter. Verwenden Sie als Passwort njdf anstelle von mkfg. mkfg als Anfangsbuchstaben von – hier Müllmerstadt, Kuhlmann, Friedrich, Gregor - können Sie sich merken, njdf sind die auf der Standard-Tastatur links daneben angeordneten Zeichen. Oder setzen Sie die Anfangsbuchstaben hkga des Liedtextes Hänschen klein, ging allein ein oder verwenden Sie zusätzliche Zeichen wie ’(.): ’hkga()’.

Seite 242 in zweitletzter Zeile _ hinzufügen: statt: DELETE FROM columns priv WHERE user=““; neu: DELETE FROM columns_priv WHERE user=““; Seite 243 hinter FLUSH LOGS ändern: statt: leert die Log-Dateien neu: lädt die Log-Dateien neu Seite 243 unter FLUSH PRIVILEGES einfügen: FLUSH QUERY CACHE defragmentiert den Query-Cache Seite 243 unter FLUSH TABLES einfügen: FLUSH USER_RESOURCES setzt Benutzer-Resourcen auf 0, um Neustart zu ermöglichen. Seite 243 vor Mit der folgenden Anweisung ... einfügen: In der Langform lautet die Login-Anweisung: C:\MySQL\Bin> mysql –user=root –password (1) Enter password: rt (1) Vor user und password sind jeweils zwei Bindestriche angeordnet! Sie können das System auch direkt mit Passwort starten: C:\MySQL\Bin> mysql –user=root –password=rt Seite 243 streichen ab: Mit der folgenden Anweisung ... bis: Seitenende, also (A10201.mys) einschließlich Seite 243 unter derzeit (A10201.mys) ergänzen: Grundregeln: Stellen Sie stets sicher, dass es keinen Benutzer gibt, der

Page 46: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

ohne Passwort in das System gelangen kann. Gewähren Sie niemals einem Dritten das Recht, auf die Tabelle user der Datenbank mysql zuzugreifen.

Seite 244 Beschreibung des GRANT-Befehls ändern. neu: GRANT zugriffsberechtigung [,zugriffsberechtigung, ...] ON zugangsberechtigung TO benutzer [IDENTIFIED BY [PASSWORD] passwort [,benutzer [IDENTIFIED BY [PASSWORD] passwort, ...] [WITH GRANT OPTION ] /

[WITH MAX_QUERIES_PER HOUR #] / [WITH MAX_UPDATES_PER HOUR #] / [WITH MAX_CONNECTIONS_PER HOUR #] Seite 244 ergänzen in der Aufzählung der Zugriffsberechtigungen unter CREATE CREATE TEMPORARY Temporäre Tabellen erstellen

TABLES unter DROP EXECUTE STORED PROCEDURES lesen unter INSERT LOCK TABLES Tabellen sperren unter SELECT SHOW DATABASES Datenbanknamen erfahren Seite 245 unter UPDATE GRANT OPTION WITH GRANT OPTON einsetzen Spezielle Administrator-Rechte: unter SHUTDOWN SUPER CHANGE MASTER, KILL THREAD, MYSQLADMIN DEBUG, PURGR MASTER, LOGS und SET GLOBAL einsetzen. USAGE Synonym für “Keine Berechtigungen“ Seite 245 die Erklärungen ändern: hinter FILE statt Dateien aus Server schreiben, sie lesen neu: SELECT ...INTO OUTFILE und LOAD DATA INFILE einsetzen hinter PROCESS statt: Threads anzeigen, ... neu: SHOW FULL PROCESSLIST einsetzen Seite 245 vor Benutzer (User) einfügen: Tabellen-Zugriffsberechtigungen: Für Tabellen können die Berechtigungen SELECT, INSERT, UPDATE,

DELETE, CREATE, DROP, GRANT OPTION, INDEX und ALTER verwendet werden. Seite 245 Zeile 14 ändern: statt: WITH GRANT OPTION

Page 47: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

neu: WITH GRANT OPTION und MAX_-Optionen Seite 245 in Zeile 18 - Erläuterung von WITH GRANT OPTION – hinter ... erwünscht ist hinzufügen: Die einem Benutzer bereits vorher eingeräumten oder die später

hinzukommenden Berechtigungen werden durch die WITH GRANT OPTION nicht beeinträchtigt. Die MAX-Zusätze wie MAX_QUERIES_PER_HOUR # begrenzen die Anzahl

der möglichen Abfragen/Änderungen/Verbindungen pro Stunde. # ist ein Integer-Wert. Bei Eingabe von 0 (Default) für # gibt es keine Einschränkung. Bei Eingabe von 3 werden nach Erreichung des Limits bis zum Ablauf der Stunden keine weiteren Abfragen/Änderungen/Verbindungen zugelassen.

Seite 245 7.letzte Zeile: statt: An drei ... neu An vier ... Seite 245 vorletzte und letzte Zeile (rechtigung) streichen und stattdessen eingeben: Nach der Anmeldung als Benutzer mkfg C:\mysql\bin> mysql –u mkfg –p Enter password: <- kg eingeben mysql> USE testdb erteilt dieser mit GRANT die Berechtigung: Seite 246 vor Beispiel 2 einfügen:

Wenn Sie dem Benutzer meier den Zugang nicht nur von localhost, sondern von allen Hosts aus zubilligen wollen, müssen Sie dies zusätzlich vereinbaren: mysql> GRANT ALL ON testdb TO meier@’%’ IDENTIFIED BY “leitg”;

Seite 246 in A10303.mys Leerzeichen zwischen UPDATE (gehalt) streichen: statt: GRANT SELECT, UPDATE (gehalt) neu: GRANT SELECT, UPDATE(gehalt) Seite 247 vor 10.4 einfügen:

Beispiel 4: Dem Benutzer dummy wird kein Passwort zugewiesen und es werden keinerlei Berechtigungen gewährt, zum Beispiel weil diese erst zu einem späteren Zeitpunkt erteilt werden sollen:

mysql> GRANT USAGE ON *.* TO dummy@localhost IDENTIFIED BY ‘du’; Sie könnten die Berechtigungsvereinbarungen auch mit dem INSERT-Befehl

direkt in die Tabelle user der Datenbank mysql schreiben. Für unser Beispiel würde die Anweisung lauten: C:\mysql\bin> mysql –u root –p

Enter password: <- rt eingeben

Page 48: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

mysql> USE mysql mysql> INSERT INTO user(host,user,password) VALUES(‘localhost’,’dummy’,password(‘du’)); (1) mysql> FLUSH PRIVILEGES; (1) Nur für die Felder host, user und password werden Werte vereinbart. In

den anderen Feldern der Tabelle bleibt der Default-Wert ’N’ erhalten. Testen Sie dies: mysql> use mysql mysql> SELECT * FROM user WHERE user=’dummy’;

Um in der Tabelle user im Feld password den Wert ’du’ in verschlüsselter Form abzulegen, wird die Funktion password() eingesetzt. In der Regel wird man den übersichtlicheren und weniger fehleranfälligen Befehl GRANT einsetzen.

Seite 247 vor 10.4 einfügen:

Zugriffsberechtigungen mit SHOW GRANTS erfahren: mysql> SHOW GRANTS FOR root@localhost; In den Anzeigen wird das Passwort in verschlüsselter Form genannt.

Benutzernamen, Passworte anzeigen: C:\mysql\bin> mysql –u root –p

Enter password: <- rt eingeben mysql> USE mysql mysql> SELECT user, password FROM user; Seite 247 unter (A10401.mys) ergänzen: Die Kurzform dafür lautet: mysql> REVOKE ALL PRIVILEGES, GRANT FROM meier@localhost; Seite 248 Zeile 8, darin tb ändern in db: statt: ... aus den Tabellen user, tb, tab- neu: ... aus den Tabellen user, db, tab- Seite 253 Zeile 8 ergänzen: statt: (1) Kommentare stehen in den Kommentarmarken <!-- und -->. neu: (1) Kommentare stehen in den Kommentarmarken <!-- und -->. Dabei stehen hinter <! und vor > jeweils zwei Bindestriche! Seite 253 Zeile 17 ändern: statt: Starten Sie Ihren Browser und rufen Sie darin H11101.HTM auf: neu: Starten Sie Ihren Browser und rufen Sie darin H11131.HTM auf: Seite 255: in H11133.PHP in letzter Zeile statt: ECHO "PHP in BODY!"; //Kommentar bis Zeilenende (2) neu: ECHO "<p> PHP in BODY!"; //Kommentar bis Zeilenende (2)

Page 49: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 256 in viert- und drittletzter Zeile folgenden Satz fett drucken: Eingeschlossene Teilstrings sind in Hochkommata zu setzen. Seite 258 unter <Body BgColor = “#EF0098“> <- Pink ergänzen: In MySQL setzen Sie ’ statt “ bei eingeschlossenen Teilstrings ein! Seite 263 in 1.Befehl ändern. statt: ECHO “<IMG SRC ="\gif\AlteUni.gif" neu: ECHO “<IMG SRC =’C:\gif\AlteUni.gif’ Seite 263 in Befehl H11172a.mys ’ statt “ einsetzen: statt: <IMG SRC="foto.gif" WIDTH = 100 ALIGN = center> neu: <IMG SRC=’foto.gif’ WIDTH = 100 ALIGN = center> Seite 266 5.Zeile und 6.Zeile Wegfall des Doppelpunktes: statt: <- Besondere Betonung: neu: <- Besondere Betonung statt: <- Zitat: neu: <- Zitat Seite 268 in H11221.PHP in betreffender Zeile ändern: statt: $A = !5; neu $a = 15; in betreffender Zeile Anführungsstriche “ hinter <p> plazieren: statt: ECHO “<p>Sein Vorname ist “ . $A .

“ und er ist “ . $a . “ Jahre alt!“ <p>; neu: ECHO “<p>Sein Vorname ist “ . $A .

“ und er ist “ . $a . “ Jahre alt! <p>”; Seite 270 in H11231.PHP jeweils in betreffender Zeile statt: echo "5 * 3 = $erg3 <br"; neu: echo "5 * 2 = $erg3 <br"; statt: echo "Divisionsrest aus 55.5/2.2 = ebenfalls nur $erg6 <p>"; neu echo "Divisionsrest aus 5.5/2.2 = ebenfalls nur $erg6 <p>"; Seite 271 in der Ergebnisanzeige muss es heißen: statt: 5 * 3 = 10 Divisionsrest aus 5/2 = 1 neu: 5 * 2 = 10 Divisionsrest aus 5/2 = 1 statt: Divsionsrest aus 55.5/2.2 = ebenfalls nur 1 neu Divsionsrest aus 5.5/2.2 = ebenfalls nur 1 Seite 291 im genannten Satz 12.5 statt 12.4 einsetzen: statt: Diese erläutern wir in den Abschnitten 12.1, speziell in 12.4. neu: Diese erläutern wir in den Abschnitten 12.1, speziell in 12.5. Seite 293 in Zeile 2 ändern

Page 50: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

statt: In Abschnitt 11.2.5 haben wir bereits die mathematischen Funktionen neu: In Abschnitt 11.2.3 haben wir bereits die mathematischen Funktionen Seite 294 in (H11271.PHP) folgende Zeile ändern statt. ECHO ROUND(-35.5445) . "<br>"; <- 36 neu: ECHO ROUND(-35.5445) . "<br>"; <- -36 Seite 309 in P11.PHP hinter FOR ($i=0; $i<$anz;$i=$i+1) (1) nach rechts setzen - wie (2) Seite 311 in letzter Zeile vor 12.3: statt: Das behandeln wir im Abschnitt 12.5. neu: Das behandeln wir im Abschnitt 12.6. Seite 315 in P22 in der 5.letzten Zeile des Programms

(1) nach rechts absetzen. Seite 316 in Tabelle unter Marken für Rahmen “ einfügen: statt: echo “</table>; neu: echo “</table>”; Seite 322 in Zeile 4 Semikolon entfernen bei mysql_connect(). Seite 332 in P51.PHP Darstellung verbessern: statt FOR ($h=0; $h <$feldanz; $h = $h + 1) (7) { $f = mysql_field_name($feldliste,$h); (8) $f = strtoupper($f); (9) ECHO "<td>$f"; (10) } neu: FOR ($h=0; $h <$feldanz; $h = $h + 1) (7) { $f = mysql_field_name($feldliste,$h); (8) $f = strtoupper($f); (9) ECHO "<td>$f"; (10) } Seite 334 Zeile 8 das Leerzeichen in ’gehalt’ einfügen: statt: ... nichtexistenten Feld ’gehalt’ ... neu: ... nichtexistenten Feld ’ gehalt’ ... Seite 337 in Zeile 16 in Punkt (7) ändern: statt: mit $feldliste[$j]. neu: mit $feldliste[$h]. Seite 340 letzte Zeile statt: die Zeichen \’ um in Hochkommata. neu: die beiden Zeichen \’ um in das einzige Zeichen ’ (Hochkomma). Seite 346 in Grafik Komma durch Punkt ersetzen: statt: Beispiel:5250,50 neu: Beispiel:5250.50

Page 51: Ergänzungen und Korrekturen in MySQL mit PHP¤nzungen_MySQL.pdfIn Kapitel 13 beschreiben wir, wie Sie MySQL installieren. In diesem Kapitel gehen wir davon aus, dass Sie den MySQL-Server

Seite 347 in F7H.HTM in 7.letzter Zeile des Programms Komma durch Punkt ersetzen: statt: Beispiel:5250,50 neu: Beispiel:5250.50 Seite 382 in erster Zeile statt: c:\MySQL neu: C:\mysql Seite 382 ab drittletzter Zeile bis 3.Zeile in Seite 383 streichen von Wenn Sie MySQL ... bis Servers zu berücksichtigen sind. Stattdessen eingeben:

Beim Starten unter Windows findet der Server seine Optionen in den Dateien my.ini und my.cnf. Beide sind Textdateien My.ini ist im Windows-Verzeichnis gespeichert:

C:\WINDOWS C:\WINNT <- bei Windows-NT

Die Optionsdatei my.cnf legen Sie im Verzeichnis C: an. Kopieren Sie dazu die Datei my-example.cnf von C:\mysql nach C:\ und benennen Sie die Datei um in my.cnf. MySQL orientiert sich zuerst in my.ini. Das Programm WinMySQLAdmin verwendet ausschließlich my.ini und benennt eine my.cnf-Datei um in my_cnf.bak. In WinMySQLAdmin finden Sie my.ini, indem Sie die Auswahl my.ini Setup wählen. Wenn Sie MySQL und die Datenbank-Daten in einem anderen als dem Standard-Verzeichnis speichern wollen, müssen Sie dies in der Optionsdatei definieren. Ändern Sie my.ini zum Beispiel so ab: [mysqld] basedir=C:/myserver <- statt C:/mysql datadir=D:/mydata/daten <- statt C:/mysql/data Zu dem Programm WinMySQLAdmin finden Sie in C:\mysql\bin auch eine Hilfe-Datei: WinMySQLAdmin.HLP.

Seite 383 unter dem Satz Damit melden Sie sich als anonymer Benutzer an. eingeben: Weitere Anweisungen zum Testen sind C:\mysql\bin> mysqlshow C:\mysql\bin> mysqlshow –u root mysql C:\mysql\bin> mysqladmin version status proc C:\mysql\bin> mysql test Seite 384 unter mysql>show tables; ergänzen mysql> select version();