• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Grundlegende MySQL-Befehle

Dieses Dokument soll kein Buch über MySQL ersetzen, sondern lediglich dem erfahrenen Anwender noch mal die grundlegenden Befehle in Kurzform vor Augen halten.

Ich gehe davon aus das jeder weiß wie er sich mit der Datenbank in Verbindung setzt.

Allgemeine Anweisungen an eine Datenbank


Eine Datenbank erstellen:

CREATE DATABASE datenbank_name;

CREATE DATABASE Meine_Firma;

Erstellt die Datenbank "Meine_Firma". Achtung einige Datenbanken unterscheiden Groß- und Kleinschreibung.



Eine bestimmte Datenbank nutzen:

USE datenbank_name;

USE Meine_Firma;

Benutzen der Datenbank "Meine_Firma".



Vorhandene Tabellen ansehen:

SHOW TABLES;

Zeigt die vorhandenen Tabellen in "Meine_Firma", da diese ja grade benutzt wird.



Eine Tabelle erstellen:

CREATE TABLE tabellen_name (spalten_name datentyp modifizierer);

CREATE TABLE Personal (Nachname CHAR(50)
Vorname CHAR(50)
Rang VARCHAR(30)
Gehalt INT);

Erstellt die Tabelle "Personal" mit den Spalten "Nachname", "Vorname", "Rang" und "Gehalt" mit den jeweils angegebenen Datentypen.



Werte in eine Tabelle eintragen:

INSERT INTO tabellen_name
VALUES (wert1, wert2, ...);


INSERT INTO Personal
VALUES (Schulze, Egon, Pfoertner, 3000);

Fügt den Datensatz des Pfoertners Egon Schulz mit einem Gehalt von 3000 Euro/Peseten/Murmeln zur Tabelle Personal hinzu.



Daten ändern:

UPDATE tabellen_name
SET spalte1=wert1, spalte2=wert2, ...
(WHERE bedingung);


UPDATE Personal
SET Gehalt=3200
WHERE Nachname = "Schulz";

Ändert das Gehalt aller mit Nachname "Schulz" auf 3200



Daten wieder löschen:

DELETE FROM tabellen_name
(WHERE bedingung);


DELETE FROM Personal
WHERE Nachname = "Schulz" AND Vorname = "Egon";

Löscht alle Datensätze bei denen der Nachname "Schulz" und der Vorname "Egon" ist



Eine Tabelle löschen:

DROP TABLE tabellen_name;

DROP TABLE Personal;

Löscht die Tabelle "Personal" aus der grade verwendeten Datenbank




Eine Datenbank löschen:

DROP DATABASE datenbank_name;


DROP DATABASE Meine_Firma;

Löscht die Datenbank "Meine_Firma"



Tabellen verändern


Spalten hinzufügen

ALTER TABLE tabellen_name ADD spalten_name;

ALTER TABLE Personal ADD Geschlecht CHAR (1);

Fügt der Tabelle "Personal" die Spalte "Geschlecht" hinzu



Spalten löschen

ALTER TABLE tabellen_name DROP spalten_name;

ALTER TABLE Personal DROP Geschlecht;

Löscht die Spalte "Geschlecht" aus der Tabelle "Personal"



Datentyp einer Spalte ändern

ALTER TABLE tabellen_name MODIFY spalten_name datentyp;

ALTER TABLE Personal MODIFY Rang VARCHAR(40);

Ändert den Datentyp der Spalte "Rang" in den angegebenen, also "VARCHAR(40)"



Bezeichnung einer Spalte ändern

ALTER TABLE tabellen_name CHANGE spalten_name_alt spalten_name_neu;

ALTER TABLE Personal CHANGE Rang Beruf VARCHAR(30);

Ändert den "Rang" in den "Beruf" mit dem Datentyp VARCHAR(30).



Namen einer Tabelle ändern

ALTER TABLE tabellen_name_alt RENAME tabellen_name_neu;

ALTER TABLE Personal RENAME Mitarbeiter;

Ändert den Namen der Tabelle "Personal" zu "Mitarbeiter".
ACHTUNG: Die Beziehungen werden NICHT automatisch mitgeändert!!!




Daten einer Datenbank abfragen


Allgemeine Form:

SELECT spalte1, spalte2, ...
FROM tabellen_name
WHERE bedingung;




Sortieren:

SELECT spalte1, spalte2, ...
FROM tabellen_name
ORDER BY spalten_name;


SELECT Nachname, Vorname
FROM Personal
ORDER BY Nachname;

Zeigt die Inhalte der Spalten "Nachname" und "Vorname" sortiert nach "Nachnamen" in aufsteigender Reihenfolge.



Abnehmend sortieren:

SELECT spalte1, spalte2, ...
FROM tabellen_name
ORDER BY spalten_name DESC;


SELECT Nachname, Vorname
FROM Personal
ORDER BY Nachname DESC;

Zeigt die Inhalte der Spalten "Nachname" und "Vorname" sortiert nach "Nachname" in absteigender Reihenfolge



Datensätze gruppieren:

SELECT spalten_name
FROM tabellen_name
GROUP BY spalten_name;


SELECT Rang
FROM Personal
GROUP BY Rang;

Zeigt zusammengefaßt alle Ränge an



Den höchste Wert einer Spalte ermitteln:

SELECT MAX(spalten_name) AS spalten_name
FROM tabellen_name;


SELECT MAX(Gehalt) AS Gehalt
FROM Personal;

Zeigt das höchste Gehalt an



Durchschnitt einer Gruppe ermitteln:

SELECT spalten_name, AVG(spalten_name)
FROM tabellen_name
GROUP BY spalten_name;


SELECT Rang, AVG(Gehalt)
FROM Personal
GROUP BY Rang;

Zeigt die durchschnittlichen Gehälter der einzelnen Ränge an.



Einschränken eines gruppierten Datensatzes:

SELECT spalten_name, AVG(spalten_name)
FROM tabellen_name
GROUP BY spalten_name
HAVING AVG(spalten_name) bedingung;


SELECT Rang, AVG(Gehalt)
FROM Personal
GROUP BY Rang
HAVING AVG(Gehalt) > 4000;

Zeigt Rang und durchschnittliches Gehalt an. Die Datensätze sind nach Rang gruppiert und müßen einen Durchschnitt von 4000 übersteigen.



Verknüpfte Abfragen über zwei Tabellen:

SELECT *
FROM tabelle1
INNER JOIN tabelle2
ON tabelle1.name=tabelle2.name;


Es werden alle Paare (zeile1,zeile2) von Zeilen gebildet, wobei zeile1 aus "tabelle1" und zeile2 aus "tabelle2" stammt. Stimmt der Eintrag von zeile1 in der Spalte "name" mit dem Eintrag von zeile2 in der Spalte "name" überein, so wird das ganze Paar als Zeile in eine neue Tabelle übernommen. Die so entstandene Tabelle wird ausgegeben.

Ersetzt man in dieser Abfrage "INNER" durch "LEFT", so werden darüber hinaus alle Zeilen aus "tabelle1" angezeigt, zu denen kein passender Eintrag in "tabelle2" existiert. Ganz analog kann man "INNER" durch "RIGHT" ersetzen, und durch "OUTER" erhält man aus beiden ursprünglichen Tabellen die Zeilen, die keinen Partner haben.

Vielen Dank an sc_m für diese Ergänzung




Ich hoffe dem Einen oder Anderen ist diese Kurzfassung in irgendeiner Form nützlich. Wenn ich noch Erweiterungen einbauen soll oder ihr Fehler entdeckt, schickt mir eine PN.
 

abgdf

Guru
Hallo,

hier noch ein paar Ergänzungen:

Anzahl der Datensätze einer Tabelle ermitteln:

SELECT COUNT(*) FROM table;

Zeigt die Anzahl der in der Tabelle "table" enthaltenen Datensätze an.

Die Daten nach einem Suchtext durchsuchen:

SELECT * FROM table WHERE field LIKE '%text%';

Sucht in den Spalten der Datensätze nach dem Suchwort "text". Dabei werden Datensätze gefunden, die in der Spalte "field" zum Beispiel die Worte "Suchtext" oder "textlastig" enthalten.

Daten aus einer ASCII-Textdatei importieren:

LOAD DATA LOCAL INFILE '/home/Benutzer/datei.txt' INTO TABLE mytable;

Ein gültiges Format für diese ASCII-Textdatei ist:

- Eine Zeile pro Datensatz.
- Spalten sind durch Tabulatoren ("\t") getrennt.
- Leere Spalten werden mit "\N" (also Backslash, dann N) gekennzeichnet.
- Daten werden nicht in Anführungszeichen eingefaßt.
- Datumsangaben haben das Format JJJJ-MM-TT, also z.B. 2006-12-24.
- Beträge mit Nachkommastellen wie etwa Geldbeträge werden z.B. als 1234.56 angegeben.
- Bool-Werte (True, False) können als "1" und "0" dargestellt werden.

Der Datenimport auf diese Weise stellt ein gewisses Sicherheitsrisiko dar und ist daher nicht standardmäßig in MySQL aktiviert. Bei der MySQL-Version von SuSE 10.0 kann er aber aktiviert werden, indem mysql mit der Option "mysql --local-infile=1" gestartet wird.

Näheres:
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
http://www.linux-club.de/ftopic21787-0-asc-0.html
Befehl "mysqlimport".

Weitere Fragen zu dem Verfahren (wie etwa zu einer - vielleicht möglichen - Einstellung eines anderen Formats der ASCII-Datei in MySQL) sollten in gesonderten Threads gestellt werden.

Viele Grüße

abgdf
 

Appleonkel

Hacker
Danke Geier habe es gerade beim googlen nach MySQL Befehle gefunden :D :D :D
Gesucht habe ich aber eigentlich den Befehl
show databases;
der mir alle meine Datenbanken anzeigt.

Appleonkel
 
Oben