of 67 /67
MySQL TM – "after select" Vortrag vom 06.05.2004 auf der PHP-Usergroup Hannover von Frank Staude <[email protected]>

MySQl - "after select"

Embed Size (px)

DESCRIPTION

Vortrag vom 06.05.2004 auf der PHP-Usergroup Hannover Warum ein Vortrag über MySQL und warum “after select”? Ich habe im laufe der Jahre in vielen Gesprächen die Erfahrung gemacht das MySQL zwar sehr, sehr häufig verwendet wird, aber die wenigsten wissen was für ein mächtiges Werkzeug sie da in den Händen halten – bei vielen „Hobbyprogrammierern“ geht es über update, insert und ein select * from nicht hinaus was oftmals zur folge hat das MySQL gar nicht zeigen kann was es kann bzw. das oftmals Aufgaben umständlich durch zusätzliche Programmierung erledigt werden, die man eigentlich durch MySQL hätte erledigen können. Oftmals hat dies auch zur Folge, dass die Performance sehr zu wünschen lässt – deshalb der Titel "after select". Dieser Vortrag kann und will nicht ein MySQL – Handbuch oder ein allgemeines Datenbanken - Buch ersetzen – ganz im Gegenteil. Auch kann ich nicht all das schreiben, was ich für interessant und wichtig halte, dann hätten wir eine Wochenschulung. Aber ich habe die Hoffnung, den einen oder anderen hiermit zumindest Appetit auf mehr zu machen.

Text of MySQl - "after select"

  • 1. MySQLTM "after select"Vortrag vom 06.05.2004 auf der PHP-Usergroup Hannovervon Frank Staude

2. 1 EINLEITUNG....................................................................................................... 72 VORAUSSETZUNGEN....................................................................................... 73 DIE LIZENZ VON MYSQL .................................................................................. 84 KOMANDOZEILENPOWER ............................................................................... 94.1 Html export ............................................................................................................................................. 94.2 XML export ........................................................................................................................................... 104.3 Spaltenberschriften unterdrcken .................................................................................................... 104.4 Ausgaben nummerieren ....................................................................................................................... 114.5 Lange Ausgabezeilen sind unleserlich................................................................................................. 125 TABELLENTYPEN ........................................................................................... 145.1 HEAP ..................................................................................................................................................... 145.2 ISAM...................................................................................................................................................... 155.3 InnoDB................................................................................................................................................... 155.4 MERGE................................................................................................................................................. 155.5 MyISAM................................................................................................................................................ 176 TRANSAKTIONEN ........................................................................................... 177 MYSQL PRAXIS ............................................................................................... 187.1 Mit NULL Werten umgehen................................................................................................................ 187.2 Einen Vergleich ausgeben .................................................................................................................... 197.3 Stringverarbeitung................................................................................................................................ 207.3.1 Einen Teilstring suchen...................................................................................................................... 207.3.2 Mustervergleich mit SQL-Mustern .................................................................................................... 207.3.3 Mustervergleich mit regulren Ausdrcken....................................................................................... 217.4 Umgang mit Datumswerten ................................................................................................................. 217.5 Weitere Spannende Dinge .................................................................................................................... 228 TOOLS.............................................................................................................. 228.1 phpMyAdmin ........................................................................................................................................ 222 3. 8.2 DB Designer4......................................................................................................................................... 258.3 MYSQL Admin..................................................................................................................................... 289 ANHANG........................................................................................................... 309.1 Datentypen............................................................................................................................................. 309.1.1 Numerische Datentypen..................................................................................................................... 309.1.1.1 TINYINT[(M)] [UNSIGNED] [ZEROFILL]............................................................................ 309.1.1.2 SMALLINT[(M)] [UNSIGNED] [ZEROFILL]........................................................................ 309.1.1.3 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]..................................................................... 309.1.1.4 INT[(M)] [UNSIGNED] [ZEROFILL]..................................................................................... 309.1.1.5 INTEGER[(M)] [UNSIGNED] [ZEROFILL].......................................................................... 309.1.1.6 BIGINT[(M)] [UNSIGNED] [ZEROFILL] .............................................................................. 309.1.1.7 FLOAT(genauigkeit) [ZEROFILL] ........................................................................................ 319.1.1.8 FLOAT[(M,D)] [ZEROFILL]................................................................................................... 319.1.1.9 DOUBLE[(M,D)] [ZEROFILL] ............................................................................................... 319.1.1.10 DOUBLE PRECISION[(M,D)] [ZEROFILL] ................................................................... 319.1.1.11 REAL[(M,D)] [ZEROFILL] ................................................................................................ 319.1.1.12 DECIMAL[(M[,D])] [ZEROFILL] ....................................................................................... 319.1.1.13 NUMERIC(M,D) [ZEROFILL] .......................................................................................... 319.1.2 String Datentypen .............................................................................................................................. 329.1.2.1 [NATIONAL] CHAR(M) [BINARY] ....................................................................................... 329.1.2.2 [NATIONAL] VARCHAR(M) [BINARY] ............................................................................... 329.1.2.3 TINYBLOB | TINYTEXT........................................................................................................ 329.1.2.4 BLOB | TEXT.......................................................................................................................... 329.1.2.5 MEDIUMBLOB | MEDIUMTEXT.......................................................................................... 329.1.2.6 LONGBLOB | LONGTEXT ................................................................................................... 329.1.3 Datumstypen ...................................................................................................................................... 329.1.3.1 DATE ....................................................................................................................................... 329.1.3.2 DATETIME.............................................................................................................................. 339.1.3.3 TIMESTAMP[(M)]................................................................................................................... 339.1.3.4 TIME ........................................................................................................................................ 339.1.3.5 YEAR[(2|4)]............................................................................................................................. 339.1.4 Komplexe Datentypen........................................................................................................................ 339.1.4.1 ENUM('wert1','wert2',...)........................................................................................................ 339.1.4.2 SET('wert1','wert2',...)............................................................................................................ 339.2 Funktionen............................................................................................................................................. 339.2.1 Nicht typenspezifische Operatoren und Funktionen .......................................................................... 349.2.1.1 Klammer .................................................................................................................................. 349.2.1.2 Vergleichsoperatoren ............................................................................................................ 349.2.1.3 =................................................................................................................................................ 349.2.1.4 , != ...................................................................................................................................... 359.2.1.5 ................................................................................................................................................ 359.2.1.9 ........................................................................................................................................... 359.2.1.10 IS NULL , IS NOT NULL .................................................................................................. 359.2.1.11 ausdruck BETWEEN min AND max............................................................................... 359.2.1.12 ausdruck IN (wert,...) ........................................................................................................ 369.2.1.13 ausdruck NOT IN (wert,...)............................................................................................... 369.2.1.14 ISNULL(ausdruck) ............................................................................................................ 369.2.1.15 COALESCE(liste).............................................................................................................. 369.2.1.16 INTERVAL(N,N1,N2,N3,...) ............................................................................................. 379.2.1.17 Logische Operatoren ........................................................................................................ 379.2.1.18 NOT , ! ................................................................................................................................ 379.2.1.19 OR , ||.................................................................................................................................. 379.2.1.20 AND , &&............................................................................................................................ 389.2.1.21 Ablaufsteuerungsfunktionen............................................................................................ 383 4. 9.2.1.22 IFNULL(ausdruck1,ausdruck2) ....................................................................................... 389.2.1.23 NULLIF(ausdruck1,ausdruck2) ....................................................................................... 389.2.1.24 IF(ausdruck1,ausdruck2,ausdruck3).............................................................................. 389.2.1.25 CASE .................................................................................................................................. 399.2.2 Zeichenketten-Funktionen.................................................................................................................. 399.2.2.1 ASCII(zeichenkette)............................................................................................................... 399.2.2.2 ORD(zeichenkette) ................................................................................................................ 399.2.2.3 CONV(N,von_basis,zu_basis) ............................................................................................. 409.2.2.4 BIN(N)...................................................................................................................................... 409.2.2.5 OCT(N) .................................................................................................................................... 409.2.2.6 HEX(N) .................................................................................................................................... 409.2.2.7 CHAR(N,...)............................................................................................................................. 409.2.2.8 CONCAT(zeichenkette1,zeichenkette2,...) ........................................................................ 419.2.2.9 CONCAT_WS(trennzeichen, zeichenkette1, zeichenkette2,...) ..................................... 419.2.2.10 LENGTH, OCTET_LENGTH, CHAR_LENGTH, CHARACTER_LENGTH.............. 419.2.2.11 LOCATE, POSITION........................................................................................................ 419.2.2.12 LOCATE(teilzeichenfolge,zeichenkette,position) ......................................................... 419.2.2.13 INSTR(zeichenkette,teilzeichenfolge)............................................................................ 429.2.2.14 LPAD(zeichenkette,laenge,fuellzeichenkette) .............................................................. 429.2.2.15 RPAD(zeichenkette,laenge,fuellzeichenkette) ............................................................. 429.2.2.16 LEFT(zeichenkette,laenge) ............................................................................................. 429.2.2.17 RIGHT(zeichenkette,laenge)........................................................................................... 429.2.2.18 SUBSTRING, MID ............................................................................................................ 429.2.2.19 LTRIM(zeichenkette) ........................................................................................................ 439.2.2.20 RTRIM(zeichenkette)........................................................................................................ 439.2.2.21 TRIM ................................................................................................................................... 439.2.2.22 SOUNDEX(zeichenkette)................................................................................................. 439.2.2.23 SPACE(N) .......................................................................................................................... 449.2.2.24 REPLACE........................................................................................................................... 449.2.2.25 REPEAT(zeichenkette,zaehler) ...................................................................................... 449.2.2.26 REVERSE(zeichenkette) ................................................................................................. 449.2.2.27 insert ................................................................................................................................... 449.2.2.28 ELT...................................................................................................................................... 449.2.2.29 FIELD.................................................................................................................................. 459.2.2.30 FIND_IN_SET.................................................................................................................... 459.2.2.31 MAKE_SET........................................................................................................................ 459.2.2.32 EXPORT_SET................................................................................................................... 459.2.2.33 LCASE, LOWER ............................................................................................................... 459.2.2.34 UCASE, UPPER................................................................................................................ 469.2.2.35 LOAD_FILE(datei) ............................................................................................................ 469.2.3 Zeichenketten-Vergleichsfunktionen ................................................................................................. 469.2.3.1 ausdruck LIKE muster [ESCAPE 'fluchtzeichen'].............................................................. 479.2.3.2 ausdruck NOT LIKE muster [ESCAPE 'fluchtzeichen'] .................................................... 479.2.3.3 ausdruck REGEXP muster , ausdruck RLIKE muster...................................................... 479.2.3.4 ausdruck NOT REGEXP muster ,ausdruck NOT RLIKE muster.................................... 489.2.3.5 STRCMP(ausdruck1,ausdruck2)......................................................................................... 489.2.3.6 MATCH (spalte1,spalte2,...) AGAINST (ausdruck)........................................................... 489.2.4 Gro-/Kleinschreibung....................................................................................................................... 489.2.5 Numerische Funktionen ..................................................................................................................... 499.2.5.1 Arithmetische Operationen................................................................................................... 499.2.5.2 +................................................................................................................................................ 499.2.5.3 -................................................................................................................................................. 499.2.5.4 * ................................................................................................................................................ 499.2.5.5 /................................................................................................................................................. 499.2.5.6 Mathematische Funktionen .................................................................................................. 499.2.5.7 -................................................................................................................................................. 499.2.5.8 ABS(X)..................................................................................................................................... 509.2.5.9 SIGN(X)................................................................................................................................... 509.2.5.10 MOD(N,M) , %................................................................................................................... 509.2.5.11 FLOOR(X) .......................................................................................................................... 509.2.5.12 CEILING(X) ........................................................................................................................ 504 5. 9.2.5.13 ROUND(X) ......................................................................................................................... 509.2.5.14 ROUND(X,D) ..................................................................................................................... 519.2.5.15 EXP(X)................................................................................................................................ 519.2.5.16 LOG(X) ............................................................................................................................... 519.2.5.17 LOG10(X) ........................................................................................................................... 519.2.5.18 POW(X,Y) , POWER(X,Y) .............................................................................................. 519.2.5.19 SQRT(X)............................................................................................................................. 519.2.5.20 PI()....................................................................................................................................... 519.2.5.21 COS(X) ............................................................................................................................... 529.2.5.22 SIN(X) ................................................................................................................................. 529.2.5.23 TAN(X)................................................................................................................................ 529.2.5.24 ACOS(X)............................................................................................................................. 529.2.5.25 ASIN(X)............................................................................................................................... 529.2.5.26 ATAN(X) ............................................................................................................................. 529.2.5.27 ATAN2(Y,X) ....................................................................................................................... 529.2.5.28 COT(X) ............................................................................................................................... 539.2.5.29 RAND() , RAND(N) ........................................................................................................... 539.2.5.30 LEAST(X,Y,...) ................................................................................................................... 539.2.5.31 GREATEST(X,Y,...) .......................................................................................................... 549.2.5.32 DEGREES(X) .................................................................................................................... 549.2.5.33 RADIANS(X) ...................................................................................................................... 549.2.5.34 TRUNCATE(X,D) .............................................................................................................. 549.2.6 Datums- und Zeit-Funktionen ............................................................................................................ 549.2.6.1 DAYOFWEEK(datum)........................................................................................................... 549.2.6.2 WEEKDAY(datum) ................................................................................................................ 549.2.6.3 DAYOFMONTH(datum) ........................................................................................................ 559.2.6.4 DAYOFYEAR(datum)............................................................................................................ 559.2.6.5 MONTH(datum)...................................................................................................................... 559.2.6.6 DAYNAME(datum)................................................................................................................. 559.2.6.7 MONTHNAME(datum) .......................................................................................................... 559.2.6.8 QUARTER(datum)................................................................................................................. 559.2.6.9 WEEK(datum) , WEEK(datum,erste).................................................................................. 559.2.6.10 YEAR(datum)..................................................................................................................... 559.2.6.11 YEARWEEK(datum) , YEARWEEK(datum,erste) ...................................................... 559.2.6.12 HOUR(zeit)......................................................................................................................... 569.2.6.13 MINUTE(zeit) ..................................................................................................................... 569.2.6.14 SECOND(zeit) ................................................................................................................... 569.2.6.15 PERIOD_ADD(P,N) .......................................................................................................... 569.2.6.16 PERIOD_DIFF(P1,P2) ..................................................................................................... 569.2.6.17 DATE_ADD, DATE_SUB, ADDDATE, SUBDATE....................................................... 569.2.6.18 EXTRACT(typ FROM datum).......................................................................................... 589.2.6.19 TO_DAYS(datum)............................................................................................................. 589.2.6.20 FROM_DAYS(N) ............................................................................................................... 589.2.6.21 DATE_FORMAT(datum,format)...................................................................................... 589.2.6.22 TIME_FORMAT(zeit,format) ........................................................................................... 609.2.6.23 CURDATE() , CURRENT_DATE.................................................................................... 609.2.6.24 CURTIME() , CURRENT_TIME...................................................................................... 609.2.6.25 NOW() , SYSDATE() , CURRENT_TIMESTAMP....................................................... 609.2.6.26 UNIX_TIMESTAMP() , UNIX_TIMESTAMP(datum).................................................... 609.2.6.27 FROM_UNIXTIME(unix_zeitstempel) ............................................................................ 619.2.6.28 FROM_UNIXTIME(unix_zeitstempel,format)................................................................ 619.2.6.29 SEC_TO_TIME(sekunden).............................................................................................. 619.2.6.30 TIME_TO_SEC(zeit)......................................................................................................... 619.2.7 Weitere Funktionen............................................................................................................................ 619.2.7.1 Bit-Funktionen ........................................................................................................................ 619.2.7.2 |................................................................................................................................................. 619.2.7.3 & ............................................................................................................................................... 619.2.7.4 > ............................................................................................................................................. 629.2.7.6 ~................................................................................................................................................ 629.2.7.7 BIT_COUNT(N)...................................................................................................................... 625 6. 9.2.7.8 Verschiedene Funktionen..................................................................................................... 629.2.7.9 DATABASE() .......................................................................................................................... 629.2.7.10 USER() , SYSTEM_USER() , SESSION_USER() ....................................................... 629.2.7.11 PASSWORD(zeichenkette) ............................................................................................. 629.2.7.12 ENCRYPT(zeichenkette[,salt])........................................................................................ 629.2.7.13 ENCODE(zeichenkette,passwort_zeichenkette).......................................................... 639.2.7.14 DECODE(crypt_zeichenkette,passwort_zeichenkette) ............................................... 639.2.7.15 MD5(zeichenkette)............................................................................................................ 639.2.7.16 LAST_INSERT_ID([ausdruck]) ....................................................................................... 639.2.7.17 FORMAT(X,D) ................................................................................................................... 649.2.7.18 VERSION()......................................................................................................................... 649.2.7.19 CONNECTION_ID().......................................................................................................... 649.2.7.20 GET_LOCK(zeichenkette,zeitueberschreitung) ........................................................... 649.2.7.21 RELEASE_LOCK(zeichenkette) ..................................................................................... 659.2.7.22 BENCHMARK(zaehler,ausdruck)................................................................................... 659.2.7.23 INET_NTOA(ausdruck) .................................................................................................... 659.2.7.24 INET_ATON(ausdruck) .................................................................................................... 659.2.7.25 MASTER_POS_WAIT(log_name, log_position) .......................................................... 659.2.8 Funktionen zur Benutzung bei GROUP BY-Klauseln....................................................................... 669.2.8.1 COUNT(ausdruck) ................................................................................................................. 669.2.8.2 COUNT(DISTINCT ausdruck,[ausdruck...])....................................................................... 669.2.8.3 AVG(ausdruck)....................................................................................................................... 669.2.8.4 MIN(ausdruck) , MAX(ausdruck) ......................................................................................... 669.2.8.5 SUM(ausdruck) ...................................................................................................................... 669.2.8.6 STD(ausdruck) , STDDEV(ausdruck) ................................................................................. 679.2.8.7 BIT_OR(ausdruck)................................................................................................................. 679.2.8.8 BIT_AND(ausdruck) .............................................................................................................. 679.3 Links ...................................................................................................................................................... 676 7. 1 EinleitungWarum ein Vortrag ber MySQL und warum after select?Ich habe im laufe der Jahre in vielen Gesprchen die Erfahrung gemacht das MySQLzwar sehr, sehr hufig verwendet wird, aber die wenigsten wissen was fr einmchtiges Werkzeug sie da in den Hnden halten bei vielenHobbyprogrammierern geht es ber update, insert und ein select * from nichthinaus was oftmals zur folge hat das MySQL gar nicht zeigen kann was es kann bzw.das oftmals Aufgaben umstndlich durch zustzliche Programmierung erledigtwerden, die man eigentlich durch MySQL htte erledigen knnen. Oftmals hat diesauch zur Folge, dass die Performance sehr zu wnschen lsst deshalb der Titel"after select".Dieser Vortrag kann und will nicht ein MySQL Handbuch oder ein allgemeinesDatenbanken - Buch ersetzen ganz im Gegenteil. Auch kann ich nicht all dasschreiben, was ich fr interessant und wichtig halte, dann htten wir eineWochenschulung. Aber ich habe die Hoffnung, den einen oder anderen hiermitzumindest Appetit auf mehr zu machen.Ich wrde mich aber freuen, wenn dieser Vortrag den einen oder anderen dazuanimiert, sich mit entsprechender Literatur zu befassen.Der Anhang ist etwas ausfhrlicher geworden, als zunchst geplant. Ich fand es aberganz sinnvoll, wenn man diesen Vortrag neben dem Rechner liegen hat und ihn auchals Nachschlagewerk verwenden kann. Deshalb habe ich mich dazu entschieden,alle Funktionen und Datentypen die MySQL bietet im Anhang aufzulisten. DieseAuflistung ist dem wirklich guten MySQL-Handbuch entnommen.Das Titelbild ist von der Internet Movie Database (www.imdb.com) und zeigt BusterKeaton in dem Film "The Navigator"MySQL ist eine Schutzmarke von MySQL AB2 VoraussetzungenAlle Beispiele in diesem Vortrag sind auf MySQL. 4.0.18 entstanden. PHP Codewurde unter PHP 4.3.3 unter Windows erstellt. Dennoch ist keines der Beispiele inirgendeiner Form Plattformabhngig. Windows ist es deshalb, weil es die Plattformist, die mir berall da zur Verfgung stand, wo ich an diesem Text gearbeitet habe.Des weiteren setze ich voraus, dass PHP und MySQL installiert ist, dass Dugrundstzlich weit wie Relationale Datenbanken funktionieren und auch schon mitPHP etwas aus einer MySQL Datenbank ausgelesen hast.7 8. 3 Die Lizenz von MySQLDie Lizenz von MySQL gibt immer wieder Anlass zu Spekulationen, weil dasProgramm sowohl als GPL Version verfgbar ist, als auch in einer KommerziellenVersion.Dabei ist es ganz einfach: Wer mit den Einschrnkungen der GPL Version nichtleben kann bzw. will, braucht die kommerzielle. Ich zitiere dazu aus dem MySQLHandbuch von mysql.deIm Wesentlichen ist unsere Lizenzpolitik und die Interpretation der GPL wie folgt:Beachten Sie bitte, dass ltere Versionen von MySQL immer noch einer strengerenLizenz unterliegen. Sehen Sie in der Dokumentation der betreffenden Version wegenentsprechender Informationen nach. Wenn Sie eine kommerzielle Lizenz bentigen,weil die GPL-Lizenz nicht zu den Anforderungen Ihrer Applikation passt, knnen Sieeine Lizenz unter https://order.mysql.com/ kaufen.Fr normalen internen Gebrauch kostet MySQL nichts. Sie brauchen uns nichts zubezahlen, wenn Sie nicht wollen.8Eine Lizenz wird bentigt: Wenn Sie ein Programm, das nicht freie Software ist, mit Code des MySQL-Serversoder der Client-Programme verbinden, die den GPL-Copyrightsunterliegen. Das ist zum Beispiel der Fall, wenn Sie MySQL als eingebettetenServer (Embedded Server) in Ihren Applikationen benutzen, oder wenn Siedem MySQL-Server Erweiterungen hinzufgen, die nicht freie Software sind.In diesen Fllen wrden Ihre Applikation bzw. Ihr Code ebenfalls GPL werden,weil die GPL in solchen Fllen wie ein Virus wirkt. Sie knnen dieses Problemvermeiden, wenn Sie den MySQL-Server mit einer kommerziellen Lizenz vonMySQL AB erwerben. Siehe http://www.gnu.org/copyleft/gpl-faq.html. Wenn Sie eine kommerzielle Applikation haben, die NUR mit MySQLfunktioniert, und wenn Sie die Applikation zusammen mit dem MySQL-Serverausliefern. Wir betrachten so etwas als Einbindung, selbst wenn es ber dasNetzwerk geschieht. Wenn Sie eine Distribution von MySQL besitzen und nicht den Quelltext frIhre Kopie des MySQL-Servers zur Verfgung stellen, so wie es in der GPL-Lizenzfestgelegt ist.Eine Lizenz wird NICHT bentigt: Sie bentigen keine Lizenz, wenn Sie den Client-Code in kommerzielleProgramme einschlieen. Der Client-Teil von MySQL unterliegt der LGPL GNULibrary General Public License-Lizenz. Der mysql-Kommandozeilen-Client beinhaltetCode der readline-Bibliothek, die unter GPL steht. Wenn Sie fr Ihre Art der Benutzung von MySQL keine Lizenz bentigen, aberMySQL mgen und die weitere Entwicklung frdern wollen, sind Sie herzlicheingeladen, in jedem Fall eine Lizenz zu erwerben. Wenn Sie MySQL in einem kommerziellen Zusammenhang benutzen unddavon profitieren, bitten wir Sie, dass Sie die Weiterentwicklung von MySQL 9. frdern, indem Sie einen bestimmten Grad von Support kaufen. Wir meinen,dass es vernnftig ist, wenn wir Sie bitten, MySQL zu untersttzen, wennMySQL Ihren Geschften hilft. (Ansonsten wrde es bei Support-Anfragenbedeuten, dass Sie nicht nur etwas fr umsonst benutzen, in das wir eineMenge Arbeit gesteckt haben, sondern dass Sie uns auch noch auffordern,kostenlosen Support zu liefern.)In Situationen, wo eine MySQL-Lizenz bentigt wird, brauchen Sie eine Lizenz proMaschine, auf der der MySQL-Server luft. Eine Mehrprozessor-Maschine zhltjedoch als eine einzelne Maschine, und es gibt keine Beschrnkung hinsichtlich derAnzahl von MySQL-Servern, die auf einer Maschine laufen, oder hinsichtlich derAnzahl von Clients, die zur gleichen Zeit mit einem Server verbunden sind, der aufdieser Maschine luft!Falls Sie nicht sicher sind, ob fr Ihre spezielle Benutzung von MySQL eine Lizenzerforderlich ist, lesen Sie diesen Abschnitt bitte nochmals, bevor Sie unskontaktieren.4 KommandozeilenpowerDen Anfang macht die Kommandozeile. Auch hier gibt es zwei weitgehenstunbeobachtete Parameter, deren Kenntnis einem aber durchaus Programmierarbeitersparen kann, geht es nur um das erzeugen eines HTML oder XML Exports desErgebnisses einer Abfrage.94.1 Html exportGegeben ist folgende Tabelle:mysql> select * from os;+----+---------+| id | os |+----+---------+| 1 | Linux || 3 | Solaris || 4 | Irix || 5 | QNX || 6 | Windows |+----+---------+Um dieses Ergebnis schnell nach HTML zu wandeln, verwenden wir den ParameterH der HTML Output erzeugt. Nicht verwechseln mit h der den Host spezifiziert. Dameine Datenbank vortrag heit und die das MySQL lokal auf meinem Rechnerlaufen habe, lautet der vollstndige Aufruf:mysql vortrag -H -u username -p -e "select * from os"Enter password: ******Und das Ergebnis sieht so aus:idos 10. 101Linux3Solaris4Irix5QNX6Windows4.2 XML exportNach dem H fr den HTML-Export steht, ist es nicht weiter verwunderlich, dass manmit X an der Kommandozeile das Ergebnis als XML bekommt. Die vollstndigeAufrufzeile lautet:mysql vortrag -X -u username -p -e "select * from os"Enter password: ******Und liefert als Ergebnis folgendes:1Linux3Solaris4Irix5QNX6Windows4.3 Spaltenberschriften unterdrckenManchmal mchte man nicht, dass in dem Abfrageergebnis die Spaltenberschriftenmit ausgegeben werden. Natrlich knnte man sich mit sed an der Kommandozeileda was passendes zurecht bauen, aber das ist nicht ntig. MySQL stellt da sogareinen passenden Schalter beim Client zur Verfgung. 11. Normalerweise sieht das Ergebnis so aus:mysql vortrag -e "select * from os" -u username -pEnter password: ******+----+---------+| id | os |+----+---------+| 1 | Linux || 3 | Solaris || 4 | Irix || 5 | QNX || 6 | Windows |+----+---------+Mit dem Schalter -N oder auch skip-column-names kann man MySQL veranlassendie Spaltenbeschriftung zu unterdrcken.mysql vortrag -N -e "select * from os" -u username -pEnter password: ******11+---+---------+| 1 | Linux || 3 | Solaris || 4 | Irix || 5 | QNX || 6 | Windows |+---+---------+4.4 Ausgaben nummerierenEs gibt Situationen, da mchte man seine Ausgabezeilen nummeriert haben. Daskann man natrlich an der Kommandozeile machen, indem man die Ausgabe vonMySQL in ein cat n pipet oder mit PHP bei einer Webanwendung selbst nummeriert aber warum? MySQL kann auch hier die Arbeit gleich mit bernehmen.Beispielausgabe:mysql vortrag -e "select os, id from os order by os" -u username -pEnter password: ******+---------+----+| os | id |+---------+----+| Irix | 4 || Linux | 1 || QNX | 5 || Solaris | 3 || Windows | 6 |+---------+----+Diese Ausgabe mchte ich durch eine Zeilennummer ergnzen:mysql vortrag -e "set @z=0; select @z := @z+1 as zeile, os, id from osorder by os" -u username -pEnter password: ****** 12. 12+-------+---------+----+| zeile | os | id |+-------+---------+----+| 1 | Irix | 4 || 2 | Linux | 1 || 3 | QNX | 5 || 4 | Solaris | 3 || 5 | Windows | 6 |+-------+---------+----+Was passiert hier? Es werden zwei SQL Kommandos [email protected]=0;Definiert eine SQL-Variable und weist ihr den Wert 0 zu.select @z := @z+1 as zeile, os, id from os order by osDer Variablen Z wird ein Wert zugewiesen der sich aus dem alten Wert der VariableZ addiert mit 1 ergibt. Diese Addition wird fr jede Zeile des Abfrageergebnissesdurchgefhrt. Die Variable Z wird als Spalte zeile ausgegeben.4.5 Lange Ausgabezeilen sind unleserlichWenn das Ergebnis einer Abfrage sehr viele Spalten liefert ist die Ausgabe sehrschwer zu lesen.mysql mysql -e "select * from user" -u username -pEnter password: ******+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+| Host | User | password | Select_priv | Insert_priv |pdate_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv |Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv |Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv| Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv |ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions |max_updates | max_connections |+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+| localhost | root | 02d316f8753be75a | Y | Y | Y | Y| Y | Y | Y | Y | Y | YY | Y | Y | Y | Y | YY | Y | Y | Y | Y| | | | 0 | 0 ||| % | root | 02d316f8753be75a | Y | Y | Y | YY | Y | Y | Y Y | Y || Y | Y | Y | Y | Y | YY | Y | Y | Y | || | 0 | 0 | 0 | 13. Das Ergebnis wird berschaubarer, wenn man MySQL veranlasst in das vertikaleAusgabeformat umzuschalten. Dies geschieht an der Kommandozeile durch denParameter E bzw. vertical oder im Interaktiven Arbeiten durch Abschlieen derEingabe mit G statt ; oder gDann wird das Ergebnis wesentlich menschenfreundlicher prsentiert.mysql mysql -e "select * from userG" -u username -pEnter password: ********************************* 1. row ***************************13Host: localhostUser: rootpassword: 124Mj6f8gw6ns75aSelect_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YReload_priv: YShutdown_priv: YProcess_priv: YFile_priv: YGrant_priv: YReferences_priv: YIndex_priv: YAlter_priv: YShow_db_priv: YSuper_priv: YCreate_tmp_table_priv: YLock_tables_priv: YExecute_priv: YRepl_slave_priv: YRepl_client_priv: Yssl_type:ssl_cipher:x509_issuer:x509_subject:max_questions: 0max_updates: 0max_connections: 0 14. 5 TabellentypenStandardmig sind neue Tabellen in MySQL vom Typ MyISAM. Aber welcheTabellentypen gibt es noch? Welche Tabelle zu welcher Gelegenheit? Eine erstebersicht liefert folgende Tabelle.Tabellentyp TransaktionenHEAP NeinISAM NeinInnoDB JaMERGE NeinMyISAM NeinMan kann zwei Arten von Tabellen unterscheiden: transaktionssichere Tabellen undnicht transaktionssichere Tabellen.Die Vorteile transaktionssicherer Tabellen- Sicherer. Auch bei Absturz kann die Datenbank ber automatischeWiederherstellung oder Backup + Transaktions-Log wiederhergestellt werden.- Man kann mehrere Statements kombinieren und diese in einem Rutsch mit14COMMIT akzeptieren.- Man kann mit ROLLBACK die in der Datenbank gemachten nderungenverwerfen.Die Vorteile nicht transaktionssicherer Tabellen:- Viel schneller, weil kein transaktionsoverhead.- Weniger Speicherbedarf, weil kein transaktionsoverhead.- Weniger Speicherbedarf im Hauptspeicher bei Aktualisierungen.Natrlich knnen bei Abfragen transaktionssichere und nicht transaktionssichereTabellen kombiniert werden.5.1 HEAPHEAP-Tabellen werden im Arbeitsspeicher gespeichert. Das macht sie sehr schnell,aber wenn MySQL abstrzt, sind alle Daten weg. HEAP-Tabellen sind sehr ntzlichfr temporre Tabellen. HEAP-Tabellen haben folgende Eigenschaften: HEAP untersttzt keine BLOB/TEXT-Spalten. HEAP untersttzt keine AUTO_INCREMENT-Spalten. HEAP untersttzt keinen Index auf eine NULL-Spalte. Es darf keine nicht eindeutigen Schlssel auf eine HEAP-Tabelle geben Du kannst nicht nach dem nchsten Eintrag in der Reihenfolge suchen (alsoden Index benutzen, um ein ORDER BY zu machen). Du brauchst genug zustzlichen Arbeitsspeicher fr alle HEAP-Tabellen, dieDu gleichzeitig benutzen willst. 15. 5.2 ISAMISAM ist das alte, ursprngliche Datenformat von MySQL. Es ist inzwischen vonMyISAM abgelst und wird in absehbarer Zeit nicht mehr zur Verfgung stehen.Der Index wird in einer Datei mit der Endung .ISM gespeichert, und die Daten in einerDatei mit der Endung .ISD. Tabellen vom Typ ISAM knnen mit demDienstprogramm isamchk geprft / repariert werden.ISAM-Tabellen haben folgende Eigenschaften: Komprimierte und Festlngen-Schlssel Feste und dynamische Datensatzlngen 16 Schlssel mit 16 Schlsselteilen pro Schlssel Maximale Schlssellnge 256 (Vorgabe) Daten werden im Maschinenformat gespeichert. Das ist schnell, aberMaschinen- / Betriebssystem-abhngig. ISAM-Tabellen sind nicht binrportabel zwischen verschiedenen15Betriebssystemen / Plattformen. Handhabt keine Tabellen > 4 GB.5.3 InnoDBInnoDB-Tabellen sind transaktions-sicher. Desweiteren untersttzen sie FOREIGNKEY-Beschrnkungen. InnoDB speichert seine Tabellen und Indexe in einemTabellenplatz (Tablespace), der aus mehreren Dateien bestehen kann. Dasunterscheidet sich beispielsweise von MyISAM-Tabellen, bei denen jede Tabelle alsseparate Datei gespeichert ist. InnoDB-Tabellen knnen jede beliebige Greannehmen, sogar auf Betriebssystemen, deren Dateigre auf 2 GB beschrnkt ist.Zur Handhabung von Transaktionen siehe Punkt 6Eine Fremdschlsseldefinition lautet wie folgtFOREIGN KEY (index_spalten_name, ...) REFERENCES tabellen_name(index_spalten_name, ...)Es mssen beide Tabellen vom Typ InnoDB sein.CREATE TABLE eltern(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;CREATE TABLE kind(id INT, eltern_id INT, INDEX par_ind (eltern_id),FOREIGN KEY (eltern_id) REFERENCES eltern(id)) TYPE=INNODB;Wer Fremdschlssel einsetzen will sollte unbedingt einen Blick in das MySQLHandbuch zu dem Thema werfen und sich das genaue Verhalten verinnerlichen.Auch um entscheiden zu knnen, ob das, was er damit erreichen mchte, auchwirklich realisierbar ist.5.4 MERGEEine MERGE-Tabelle ist eine Sammlung von identischen MyISAM-Tabellen, die wieeine einzige Tabelle benutzt werden knnen. Auf diese Sammlung von Tabellenknnen nur SELECT, DELETE und UPDATE ausgefhrt werden. Wenn Du eine 16. MERGE-Tabelle gelscht (DROP) hast, dann ist nur die Zusammenfassung derTabellen zu einer Tabelle gelscht, nicht die tatschlichen Tabellen. IdentischeTabellen heit, dass die Tabellen mit identischen Spalten- undSchlsselinformationen erzeugt wurden.Beispielsweise knnte man die Log-Informationen des Webservers jeweilsmonatsweise in eine Tabelle schreiben. Die vergangenen Monate knnten mitmyisampack komprimiert sein und dennoch knnte man mit einer MERGE-Tabelleber alle Tabellen mit Log-Informationen alle durchsuchen.Eine andere Anwendung wre auf diese Art und Weise die vorhandenenDateigrenbeschrnkungen der Betriebssysteme zu umgehen.Allerdings haben MERGE-Tabellen auch Nachteile: Man kann nur identische MyISAM-Tabellen fr eine MERGE-Tabelle16benutzen. AUTO_INCREMENT-Spalten werden bei INSERT nicht automatischaktualisiert. REPLACE funktioniert nicht. MERGE-Tabellen benutzen mehr Datei-Deskriptoren. Eine MERGE-Tabelle,die ber 10 Tabellen mappt, und 10 Benutzer diese benutzen, bentigt 10 * 10+ 10 Datei-Deskriptoren (10 Daten-Dateien fr 10 Benutzer und 10gemeinsam genutzte Index-Dateien). Lesevorgnge von Schlsseln sind langsamer.Wie lege ich denn nun so was an?CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, nachricht CHAR(20));CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, nachricht CHAR(20));INSERT INTO t1 (nachricht) VALUES ("test"),("tabelle"),("t1");INSERT INTO t2 (nachricht) VALUES ("test"),("tabelle"),("t2");CREATE TABLE gesamt (a INT NOT NULL, nachricht CHAR(20), KEY(a)) TYPE=MERGEUNION=(t1,t2) INSERT_METHOD=LAST;Das kann man dann so abfragen:mysql> select * from gesamt;+---+-----------+| a | nachricht |+---+-----------+| 1 | test || 2 | table || 3 | t1 || 1 | test || 2 | table || 3 | t2 |+---+-----------+ 17. 5.5 MyISAMMyISAM ist der default Tabellentyp in MySQL.17Eigenschaften von MyISAM Tabellen Untersttzung fr groe Dateien (63-Bit) auf Dateisystemen /Betriebssystemen, die groe Dateien untersttzen. Alle Daten werden mit dem niedrigen Byte zuerst gespeichert. Das macht dieDaten Maschinen- und Betriebssystem-unabhngig. (Auer evt. EmbeddedSystemen) BLOB- und TEXT-Spalten knnen indiziert werden. NULL-Werte sind in indizierten Spalten erlaubt. Die maximale Schlssellnge betrgt vorgabemig 500 Bytes6 TransaktionenEine Transaktion fasst eine Reihe von Anweisungen zusammen und sichert uns diefolgenden Eigenschaften zu: Kein anderer Client kann die in der Transaktion verwendeten Datenverndern, whrend die Transaktion noch luft. Das System verhlt sich so,als htte man den Server ganz fr sich alleine. Transaktionen bewirken alsoeine Serialisierung des Zugriffs auf gemeinsam genutzte Ressourcen beiOperationen, die aus mehreren Anweisungen bestehen. Anweisungen einer Transaktion werden als Einheit betrachtet und besttigt(COMMIT), aber nur, wenn alle Operationen erfolgreich ausgefhrt werden.Tritt ein Fehler auf, werden alle vor diesem Fehler vorgenommenenOperationen zurckgenommen (ROLLBACK). Die verwendeten Tabellenbefinden sich nach dem Rollback wieder in dem Ursprungszustand, ganz soals wren die Anweisungen nie ausgefhrt worden.Um mit Transaktionen zu arbeiten bedarf es nicht sehr viel. Eine oder mehrere Tabellen von einem Typ, der Transaktionen untersttzt. Sicherstellen, dass der autocommit Modus ausgeschaltet ist.Beispiel:mysql> CREATE TABLE t (i INT) TYPE = InnoDB;mysql> begin;mysql> INSERT INTO t (i) VALUES(1);mysql> INSERT INTO t (i) VALUES(2);mysql> COMMIT; 18. 18mysql> SELECT * FROM t;+------+| i |+------+| 1 || 2 |+------+Bei einem Fehler verwendet man statt dem COMMIT ein ROLLBACK um dieTransaktion wieder aufzuheben.mysql> CREATE TABLE t (i INT) TYPE = InnoDB;mysql> begin;mysql> INSERT INTO t (i) VALUES(1);mysql> INSERT INTO t (x) VALUES(2);ERROR 1054 at line 5: Unknown column 'x' in 'field list'mysql> ROLLBACK;mysql> SELECT * FROM t;+------+| i |+------+Statt immer einen Anweisungsblock mit BEGIN einzufassen kann auch mit SETAUTOCOMMIT = 1; der Autocommitmodus ausgeschaltet werden.ABER: NICHT ALLES kann mit ROLLBACK rckgngig gemacht werden. Wer einDROP TABLE durchfhrt sollte sich nicht wundern, dass die Tabelle auch nacheinem ROLLBACK verschwunden bleibt.7 MySQL Praxis7.1 Mit NULL Werten umgehenEin Abfrageergebnis enthlt NULL-Werte, wie gehe ich in PHP damit um?PHP stellt in Ergebnismengen NULL-Werte als nicht gesetzte Werte dar. Das heit,dass wir mit der Funktion isset() einen solchen nicht gesetzten Wert entdeckenknnen. Das sieht so aus:$result = mysql_query ("SELECT * FROM TEST", $dbh);while ($row = mysql_fetch_row($result)){while (list ($key, $value) = each ($row)){If (!isset($row[$key]))$row[$key] = "NULL";}} 19. In PHP4 gibt es den Wert NULL. Hier findet der Vergleich dann mit dem Dreifach-gleich-19Operator statt.If ($row[$key] === NULL)$row[$key] = "NULL";7.2 Einen Vergleich ausgebenManchmal hat man ja das Problem, dass eine Where-Klausel nicht so ganz das tutwas man erwartet, oder man will wissen, warum sie genau das Ergebnis ausgibt, dassie ausgibt. Dazu wre es gut, wenn man sich die Ergebnisse von Vergleichenanzeigen lassen knnte.Man kann die Ergebnisse von Vergleichen ausgeben, wenn man sie "normal" in seinSelect schreibt:mysql> select 'a' > 'A';+-----------+| 'a' > 'A' |+-----------+| 0 |+-----------+mysql> select 'a' = 'A';+-----------+| 'a' = 'A' |+-----------+| 1 |+-----------+Wenn wir also folgende Abfrage an unsere Tabelle mit den Betriebssystemen stellen:mysql> select id, os from os where id > 4;+----+---------+| id | os |+----+---------+| 5 | QNX || 6 | Windows |+----+---------+Und wir wissen wollen warum MySQL so entschieden hat, dann holen wir dieBedingung nach vorne in das select und lassen uns den Vergleich ausgeben.mysql> select id, os, id > 4 from os;+----+---------+--------+| id | os | id > 4 |+----+---------+--------+| 1 | Linux | 0 || 3 | Solaris | 0 || 4 | Irix | 0 || 5 | QNX | 1 || 6 | Windows | 1 |+----+---------+--------+ 20. 7.3 Stringverarbeitung7.3.1 Einen Teilstring suchenUm herauszufinden, ob ein bestimmter String in einem anderen String vorkommt,kann man die LOCATE Funktion verwenden. LOCATE hat 2 feste und ein optionalesArgument.Argument 1 ist der String, nachdem gesucht wird. Argument 2 ist der String, in demgesucht wird und der dritte Parameter ist die Position, ab der gesucht wird. DerRckgabewert ist die Position, an der der gesuchte String gefunden wurde, oder 0,wenn es keinen Treffer gegeben hat.mysql> select os, locate('i',os) from os;+---------+----------------+| os | locate('i',os) |+---------+----------------+| Linux | 2 || Solaris | 6 || Irix | 1 || QNX | 0 || Windows | 2 |+---------+----------------+mysql> select os, locate('i',os,4) from os;+---------+------------------+| os | locate('i',os,4) |+---------+------------------+| Linux | 0 || Solaris | 6 || Irix | 0 || QNX | 0 || Windows | 0 |+---------+------------------+7.3.2 Mustervergleich mit SQL-MusternAnstelle eines einfachen Vergleiches kann man mit den Funktionen LIKE und NOTLIKE einen Mustervergleich durchfhren.Vergleiche mit SQL-Mustern benutzen statt = und != die Operatoren LIKE und NOTLIKE, um einen Vergleich mit einem String durchzufhren. Die Suchmuster knnenzwei besondere Metazeichen enthalten: _ fr jedes einzelne Zeichen und % fr einebeliebige Folge von Zeichen.mysql> select os from os where os LIKE 'in';Empty set (0.07 sec)mysql> select os from os where os LIKE '%in%';+---------+| os |+---------+| Linux || Windows |+---------+20 21. mysql> select os from os where os LIKE '_in%';+---------+| os |+---------+| Linux || Windows |+---------+7.3.3 Mustervergleich mit regulren AusdrckenWenn die Mglichkeiten von LIKE nicht mehr ausreichen, dann kann man auch mitHilfe von Regulren Ausdrcken suchen. MySQL bietet dafr den REGEXPOperator. Regulre Ausdrcke werde ich nicht weiter beschreiben. Zu einem, weil wirvor 3 Monaten darber einen Vortrag hier in der PHPUG Hannover hatten, zumanderen, weil man alleine ber das Thema ganze Bcher schreiben kann. Oreilly hatda brigens ein ganz gutes zu im Angebot.Suchen wir also mit einem RegExp in der Datenbank;mysql> select os from os where os REGEXP 'in.*';21+---------+| os |+---------+| Linux || Windows |+---------+mysql> select os from os where os REGEXP '^Win';+---------+| os |+---------+| Windows |+---------+7.4 Umgang mit DatumswertenMySQL gibt Datumswerte normalerweise in dem Format YYYY-MM-DD aus. Dasentspricht ISO-8601 und ist damit das gltige Datumsformat, allerdings ist derMensch in unseren Breitengraden mehr an DD.MM.YYYY gewhnt. Also muss das inder Ausgabe entsprechend gewandelt werden.Mit Hilfe der vielen Datums und Zeit-Funktionen von MySQL (Kapitel 9.2.6) knnenalle erdenklichen Konvertierungen direkt von der Datenbank erledigt werden, so dassman sich in seinen Clientprogramm da nicht drum kmmern muss.Auch das Konvertieren von Datumswerten zu Tagen, Sekunden, Rechnen mitZeitintervallen und Altersberechnungen sind dort bei den jeweiligen Funktionenbeschrieben. 22. 7.5 Weitere Spannende Dingedie MySQL kann, aber hier und heute nicht weiter im Detail beleuchtet werdensollen.- FULLTEXT zum Suchen in Texten- Konfiguration des Servers- Mitgelieferte Tools wie mysqladmin, mysqldump, mysqlimport, mysqlhotcopy22usw.- Lokalisierung- Die Logdateien- Optimierung- Replikation- Die Kommandos OPTIMIZE TABLE und ANALYZE TABLEJa, es macht Sinn das MySQL Handbuch zu lesen 8 ToolsIm folgenden 3 Programme die einem das Leben und den Umgang mit MySQLwesentlich leichter machen.8.1 phpMyAdminDen phpMyAdmin muss ich wahrscheinlich nicht vorstellen. Er ist das defakto Toolzum bearbeiten von MySQL Tabellen und wahrscheinlich bei (fast) jedem Hosterbereits mit installiert.Abbildung 1 Startseite phpMyAdmin 23. Der phpMyAdmin ist ein Webbasiertes Datenbank-Frontend. Mit ihm kann man seineTabellen per Browser pflegen. Neue Datenbanken / Tabellen anlegen, Inhaltebearbeiten. Datenbanken sichern und vieles mehr.23Abbildung 2 Auflistung der Tabellen einer DB 24. 24Abbildung 3 Detailansicht einer TabelleAbbildung 4 Bearbeiten einer Spalte 25. 8.2 DB Designer4Der DBDesigner von FabForce ist eine Anwendung fr Windows und Linux.DBDesigner ist ein visuelles Datenbankmodellierungstool. Es kann auer mit MySQLauch mit ODBC, Oracle und MSSQL Datenbanken reden. Desweiteren bietet es dieMglichkeit zum Reverse Engeniering und Synchronisation mit Datenbanken.DBDesigner ist meiner Meinung nach ein ganz heier Tipp. Unbedingt ansehen! Istseltsamerweise kaum bekannt.25Abbildung 5 DBDesigner - bersicht einer DB 26. 26Abbildung 6 Bearbeiten einer Tabelle 27. 27 28. 8.3 MYSQL AdminDer MySQLAdmin ist ein grafisches Verwaltungstool fr Windows und Linux direktvom MySQL Hersteller. Alle Verwaltungsaufgaben lassen sich sehr einfach ber einGUI erledigen.28 29. 29 30. 309 Anhang9.1 DatentypenAus dem MySQL-Handbuch:9.1.1 Numerische Datentypen9.1.1.1 TINYINT[(M)] [UNSIGNED] [ZEROFILL]Eine sehr kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist -128 bis 127. Dervorzeichenlose Bereich ist 0 to 255.9.1.1.2 SMALLINT[(M)] [UNSIGNED] [ZEROFILL]Eine kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist -32768 bis 32767. Dervorzeichenlose Bereich ist 0 bis 65535.9.1.1.3 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]Eine Ganzzahl mittlerer Gre. Der vorzeichenbehaftete Bereich ist -8388608 bis8388607. Der vorzeichenlose Bereich ist 0 bis 16777215.9.1.1.4 INT[(M)] [UNSIGNED] [ZEROFILL]Eine Ganzzahl normaler Gre. Der vorzeichenbehaftete Bereich ist -2147483648 bis2147483647. Der vorzeichenlose Bereich ist 0 bis 4294967295.9.1.1.5 INTEGER[(M)] [UNSIGNED] [ZEROFILL]Ein Synonym fr INT.9.1.1.6 BIGINT[(M)] [UNSIGNED] [ZEROFILL]Eine groe Ganzzahl. Der vorzeichenbehaftete Bereich ist -9223372036854775808 bis9223372036854775807. Der vorzeichenlose Bereich ist 0 bis 18446744073709551615.Einige Dinge solltest Du bei BIGINT-Spalten im Hinterkopf haben: Weil alle arithmetischen Berechnungen mit vorzeichenbehaftetenBIGINT- oder DOUBLE-Werten durchgefhrt werden, solltest Du keinevorzeichenlosen Ganzzahlen grer als 9223372036854775807 (63 Bits)benutzen, auer bei Bit-Funktionen! Wenn doch, knnen einige derletzten Ziffern im Ergebnis falsch sein, weil Rundungsfehler beimUmwandeln von BIGINT in DOUBLE auftreten. MySQL 4.0 kann BIGINT infolgenden Fllen handhaben:o Benutze Ganzzahlen, um groe vorzeichenlose Wert in einerBIGINT-Spalte zu speichern.o Bei MIN(groe_ganzzahl_spalte) und MAX(groe_ganzzahl_spalte).o Bei der Benutzung der Operatoren (+, -, * usw.), wenn beideOperanden Ganzzahlen sind. Du kannst immer einen genauen Ganzzahlwert in einer BIGINT-Spaltespeichern, wenn Du sie als Zeichenkette speichern, denn in diesem Fallwird dieser nicht zwischendurch als Double dargestellt. `-', `+' und `*' benutzen arithmetische BIGINT-Berechnungen, wenn beideArgumente INTEGER-Werte sind! Das heit, wenn Du zwei Ganzzahlenmultiplizierst (oder Ergebnisse von Funktionen, die Ganzzahlen 31. zurckgeben), erhltst Du vielleicht falsche Ergebnisse, wenn dasErgebnis grer als 9223372036854775807 ist.9.1.1.7 FLOAT(genauigkeit) [ZEROFILL]Eine Fliekommazahl. Kann nicht vorzeichenlos sein. genauigkeit ist