Tipps und Regeln zu MySQL
![[Bildschirmfoto]
Tipps und Regeln zu MySQL [Bildschirmfoto]
Tipps und Regeln zu MySQL](img/regeln_zu_mysql.png)
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 |