Zusammenstellung einiger Mysql Befehle für die Konsole!
Einloggen:
- Als Benutzer Root:
mysql -u root -p
oder
mysql -p
wenn man schon als Root in der Konsole angemeldet ist!
- Als normaler Benutzer:
mysql -u benutzer -p
Ausloggen:
- Stets
exit oder quit
eingeben und Enter drücken!
Datenbank verwalten!
Eine Datenbank erstellen:
CREATE DATABASE IF NOT EXISTS datenbankname;
Datenbank löschen:
DROP DATABASE IF EXISTS datenbankname;
Datenbanken anzeigen:
SHOW DATABASES;
In eine Datenbank wechseln:
USE datenbankname;
Tabellen in einer Datenbank anzeigen:
SHOW TABLES;
Mit Auswahl einer Datenbank:
SHOW TABLES FROM datenbankname;
Struktur einer Tabelle anzeigen:
SHOW FIELDS FROM tabellenname;
Oder etwas genauer:
SHOW CREATE TABLE tabellenname;
Tabelle in einer Datenbank umbenennen:
ALTER TABLE alter_tabellenname RENAME neuer_tabellenname;
Tabelle in einer Datenbank löschen:
DROP TABLE tabellenname;
Mysql Datenbankbenutzer verwalten!
Mysql Benutzer für eine Datenbank erstellen:
- Mit Befehl:
GRANT ALL ON datenbankname.* TO 'benutzer'@'localhost' IDENTIFIED BY 'passwort';
wird der Zugriff für ein Benutzer von localhost auf die angegebene Datenbank bestimmt!
- Mit Befehl:
GRANT ALL ON datenbankname.* TO 'benutzer'@'10.0.0.1' IDENTIFIED BY 'passwort';
wird der Zugriff für ein Benutzer von 10.0.0.1 auf die angegebene Datenbank bestimmt!
- Die Option “ALL” setzt alle wichtigen Zugriffsrechte für die Datenbank. Mysql “GRANT OPTION” werden damit nicht gesetzt!
- Das “.*” hinter “datenbankname” bezieht sich auf die Tabellen in einer Datenbank. In meinem Fall werden Rechte für alle Tabellen gleich gesetzt!
Benutzerrechte wieder entziehen:
REVOKE ALL ON datenbankname.* FROM 'benutzer'@'localhost';
Benutzer löschen:
DROP USER 'benutzer'@'localhost';
Rechte eines Benutzers anzeigen:
SHOW GRANTS FOR 'benutzer'@'localhost';
Rechte des aktuellen eingeloggten Benutzers anzeigen:
SHOW GRANTS FOR CURRENT_USER;
Hier eine Gesamtübersicht von der Mysql Seite: Mysql Account Management Statements
Mysql Indizierung
Um Datenbankabfragen schneller und effizienter zu gestalten ist es ratsam, gerade bei Großen Datenbanken, einen INDEX zu erstellen. Wenn man oft eine “WHERE” Abfrage auf eine bestimmte Spalte richtet, sollte man auf diese Spalte einen INDEX erstellen. Hierbei unterscheidet man von Index oder eindeutigen Index. Bei einem eindeutigen Index darf der Wert in einer Spalte nur einmal vorkommen.
Index erstellen:
ALTER TABLE tabellenname ADD KEY (spaltenname);
Eindeutigen Index erstellen:
ALTER TABLE tabellenname ADD UNIQUE (spaltenname);
Index oder eindeutigen Index entfernen:
ALTER TABLE tabellenname DROP KEY spaltenname;
Fremdschlüssel hinzufügen:
tb = Tabelle
sp = Spalte
ALTER TABLE tb_2 ADD FOREIGN KEY (sp_1) REFERENCES tb_1 (sp_1) ON DELETE RESTRICT ON UPDATE CASCADE;
Erklärung zum Beispiel:
- Wir befinden uns in der selben Datenbank
- In der sp_1 in tb_1 muss ein INDEX erstellt sein
- In der tb_2 sp_1 gelten dann nur die Werte welche auch in tb_1 sp_1 stehen
- “ON DELETE RESTRICT” bedeuted, wenn man in tb_1 sp_1 Werte löschen möchte, jedoch in tb_2 sp_1 zeile_x noch Werte drin stehen, dann wird das Löschen verhindert
- Stattdessen geht auch “ON DELETE CASCADE”, diese Option würde ohne Fehlermeldung alle Werte in tb_2 sp_1 Zeile_x mit löschen
- “ON UPDATE CASCADE” bedeuted, wenn man in tb_1 sp_1 Werte ändert, werden diese geänderten Werte auch automatisch in tb_2 sp_1 übernommen. Das ist genial!
- “ON UPDATE RESTRICT” verhindern das Ändern der Werte, ist aber nicht wirklich sinnvoll und Widerspricht dem eigentlichen Nutzen von Fremdschlüsseln
Der Vorteil:
Fremdschlüssel eignen sich hervoragend um Ordnung über mehrere Tabellen zu halten. Tabellenleichen werden damit gut bekämpft.
Die Krux:
Wie im Punkt 3 schon erwähnt, gelten dann nur Werte welche auch in der Referenztabelle stehen. Alles erstmal kein Problem, solange man nicht die Fremdschlüssel hinterher einrichten möchte. Es kommt dann zu einer Fehlermeldung wenn in tb_2 sp_1 Werte stehen, welcher aber nicht in tb_1 sp_1 stehen.
Wie kommt man denn in die Datenbank? Ich muss einen Fehler ausbessern damit meine bestellte Seite wieder funktioniert.
Was für ein Fehler ist das? Können wir vielleicht einfacher beheben.