Tipps und Regeln zu MySQL

MySQL-Anweisungen sollten zur besseren Lesbarkeit groß geschrieben werden und um diese von den Spalten-Bezeichnungen zu unterscheiden.

Tabellennamen und Spalten-Bezeichnungen können in Backtick (oder Backquote, deutsch für "rückwärts geneigtes Hochkomma") `name` gesetzt werden (Backticks erzeugt man mit der Umschalt + Apostroph-Taste).

Spalten-Bezeichnungen oder Tabellennamen dürfen keine MySQL-Anweisungen, Umlaute und Sonderzeichen enthalten.

CREATE
Bei den Feldtypen BLOB und TEXT ist keine Angabe der maximalen Länge erlaubt.

INSERT
Die Anzahl der Spalten-Bezeichnungen und einzufügender Werte muss immer identisch sein. Spalten-Bezeichnungen dürfen nicht, Werte müssen von Hochkommata (einfache Anführungszeichen) eingeschlossen werden.

SELECT
Bei der Abfrage auf Gleichheit darf kein doppeltes Gleichzeichen (==) wie bei PHP verwendet werden. Bei der LIMIT-Angabe beginnt der erste Parameter (Startwert) bei 0. Ist der erste Wert (Startwert) gleich Null, kann man ihn weglassen, z. B. LIMIT 3 (gibt die ersten drei Zeilen aus).

DELETE
Der Aufruf von DELETE ohne Bedingung (WHERE) leert die gesamte Tabelle.

Formatierung der Anweisung

Eine lange MySQL-Anweisung sollte in mehrere Zeilen aufgeteilt werden, erstens macht es die Anweisung übersichtlicher und zweitens wird bei einer Fehlermeldung die betreffende Zeile mit ausgegeben.

$sql = "SELECT 
          `vorname`,
          `name`,
          `strasse`,
          `hausnummer`,
          `plz`,
          `ort`,
          `vorwahl`,
          `telefon`
     FROM 
          `kunden` 
     WHERE 
          `ort` = 'Berlin' 
     ORDER BY 
          `name` 
     LIMIT 
          0,20";

Wichtig ist ein sauberer Stil beim schreiben von Anweisungen, dann schleichen sich weniger Fehler ein und gemachte Fehler findet man schneller.

Reservierte Wörter in MySQL

Der Parser bei MySQL kann die Syntax nur dann korrekt erkennen, wenn bestimmte Ausdrücke für SQL reserviert bleiben. Wenn Sie diese Wörter als Spalten-Bezeichnungen benutzen wollen, müssen Sie diese in Backticks setzen (maskieren).

Mein Tipp: Maskieren Sie immer und überall. Das spart Ihnen die Mühe zu überlegen, ob Sie auf das maskieren verzichten können und gegebenenfalls eine zeitaufwendige Fehlersuche.

ACCESSIBLE ADD ALL
ALTER ANALYZE AND
AS ASC ASENSITIVE
BEFORE BETWEEN BIGINT
BINARY BLOB BOTH
BY CALL CASCADE
CASE CHANGE CHAR
CHARACTER CHECK COLLATE
COLUMN CONDITION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GRANT GROUP HAVING
HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
HOUR_SECOND IF IGNORE
IN INDEX INFILE
INNER INOUT INSENSITIVE
INSERT INT INT1
INT2 INT3 INT4
INT8 INTEGER INTERVAL
INTO IS ITERATE
JOIN KEY KEYS
KILL LEADING LEAVE
LEFT LIKE LIMIT
LINEAR LINES LOAD
LOCALTIME LOCALTIMESTAMP LOCK
LONG LONGBLOB LONGTEXT
LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
MATCH MEDIUMBLOB MEDIUMINT
MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
MINUTE_SECOND MOD MODIFIES
NATURAL NOT NO_WRITE_TO_BINLOG
NULL NUMERIC ON
OPTIMIZE OPTION OPTIONALLY
OR ORDER OUT
OUTER OUTFILE PRECISION
PRIMARY PROCEDURE PURGE
RANGE READ READS
READ_ONLY READ_WRITE REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE XOR
YEAR_MONTH ZEROFILL  

Dies ist keine vollständige Liste!

SELECT * -Anweisung

Vermeiden Sie das Abfragen sämtlicher Spalten in einer SELECT-Anweisung (SELECT *).

Das Abfragen sämtlicher Spalten in einer SELECT-Anweisung ist in 90% aller Fälle überflüssig. Meist benötigt man nur bestimmte Spalten, dann sollte man auch nur diese Spalten abfragen. Natürlich ist es als Programmierer einfacher, einfach ein "SELECT *" zu nutzen, als jeder benötigte Spalte einzeln zu tippen, aber die zweite Variante ist auf jeden Fall Ressourcen sparender. Dabei geht es nicht nur um die Geschwindigkeit von MySQL, sondern auch um den Speicherbedarf des Skripts.

Feldtypen (Datentypen)

Type Beschreibung
TINYINT Ganzzahlen von 0 bis 255 oder von -128 bis 127
SMALLINT Ganzzahlen von 0 bis 65'535 oder von -32'768 bis 32'767
INT Ganzzahlen von 0 bis 4'294'967'295 oder von -2'147'483'648 bis 2'147'483'647
BIGINT Ganzzahlen von 0 bis 2^64-1 oder von -(2^63) bis (2^63)-1
FLOAT Fliesskommazahl mit Vorzeichen. Wertebereich von -(3,402823466×1038) bis -(1,175494351×10-38)
DOUBLE / REAL Fliesskommazahl mit Vorzeichen. Wertebereich von -(1,79769×10308) bis -(2.22507×10-308)
DATE Datum im Format 'YYYY-MM-DD'. Wertebereich von 01.01.1000 bis 31.12.9999
DATETIME Datumsangabe im Format 'YYYY-MM-DD hh:mm:ss'.
TIME Zeit zwischen -838:59:59 und 839:59:59. Ausgabe: hh:mm:ss
YEAR Jahr zwischen 1901 bis 2155 bei (4) und zwischen 1970 bis 2069 bei (2)
CHAR Zeichenkette fester Länge. Wertebereich 0 bis 255
VARCHAR Zeichenkette variabler Länge. Wertebereich 0 bis 255
BINARY Zum Speichern binärer Strings, unabhängig vom Zeichensatz. Wertebereich 0 bis 255
CHAR Zeichenkette mit fester Länge. Wertebereich 0 bis 255. Füllt freien Platz mit Leerzeichen auf.
TEXT Zeichenkette mit fester Länge. Wertebereich 0 bis 65'535
TINYTEXT Zeichenkette mit fester Länge. Wertebereich 0 bis 255
MEDIUMTEXT Zeichenkette mit fester Länge. Wertebereich 0 bis 16'777'215
LONGTEXT Zeichenkette mit fester Länge. Wertebereich 0 bis 4'294'967'295
ENUM Liste von Werten (val1, val2, ...). 65'535 eineindeutige Elemente sind maximal möglich
SET String-Objekt mit verschiedenen Variablen. 64 sind maximal möglich