MySQL / Tipps und Regeln zu MySQL

von: Werner Zenk

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

Tabellennamen und Feldnamen können in Backtick (oder Backquote, deutsch
für "rückwärts geneigtes Hochkomma") `feldname` gesetzt werden.

Feldnamen noch Tabellennamen dürfen keine MySQL-Anweisungen, Umlaute und
Sonderzeichen enthalten. Außerdem muss die Groß.- und Kleinschreibung beachtet werden.

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

INSERT
Die Anzahl der Feldnamen und einzufügender Werte muss immer identisch sein.
Feldnamen dürfen nicht, Werte müssen von Hochkommata 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 leert die gesamte Tabelle.

 

Ein langer SQL-Befehl sollte in mehrere Zeilen aufgeteilt werden, erstens macht es den Befehl ü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, sich einen sauberen Stil im Schreiben von PHP/MySQL anzugewöhnen. 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 Feldnamen (Spaltennamen) 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  


Einige Ausdrücke werden sehr gerne verwendet, hier also noch eine Auswahl aus den
obigen Ausdrücken, die nicht verwendet werden dürfen:
      ACTION 
      ALTER
      BIT 
      DATE 
      ENUM 
      NO 
      TEXT 
      TIME 
      TIMESTAMP 

 

Vermeide 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 den Speicherbedarfs des PHP-Skriptes.

 

 Das könnte Sie interessieren:
MySQL - Mindestwert einer Spalte ermitteln  MySQL - Höchstwert einer Tabellenspalte ermitten  MySQL-Webseitenschutz - Mit dem Webseitenschutz lassen sich mehrere Webseiten schützen. Die Benutzerdaten werden in einer MySQL-Datenbank gespeichert. Benutzer können sich registrieren lassen, nach der Registrierung erhalten die Benutzer eine E-Mail mit einen Link darin um die Registrierung abzuschließen.  MySQL - Datum vom Timestamp anzeigen  MySQL - Zufällige Datensätze auslesen  MySQL - Das Datum der letzten Stunde anzeigen  MySQL - Spalten-Durchschnitt ermitteln  MySQL - Löschen eines Datensatzes oder mehrere Datensätze  …mehr
© 2000-2012 Homepage-Total.de Kontakt - Impressum - Banner