IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Datenbanken - SQL



SQL

Eine Dokumentation, in welcher die Grundlagen der Datenbankabfragesprache SQL beschrieben wird.


Autor: Patrick Bucher (paedubucher)
Datum: 26-04-2004, 10:40:48
Referenzen: SQL - Grundlagen und Datenbankdesign, Herdt Verlag
Schwierigkeit: Anfänger
Ansichten: 14985x
Rating: 8.75 (8x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Was ist mySQL

Das Datenbanksystem mySQL basiert auf der Datenbankabfrage Sprache SQL (Structured Query Language). SQL Datenbanken werden relational gespeichert und nicht etwa hierarchisch wie z.B. in der Windows Registry. Mit SQL kann man Datenbanken und Tabellen erstellen, löschen, Daten in die Datenbank einfügen, verändern und natürlich auch abfragen.

In mySQL wird jeder Befehl mit einem Semikolon abgeschlossen. Auf die Gross-/Kleinschreibung muss nicht geachtet werden. Man kann die Befehle auf beliebig viele Zeilen verteilen. Das fördert die Übersicht.

Alle mySQL Schlüsselworte werden GROSS geschrieben, Abfrageteile, welche durch spezifische Daten ersetzt werden sind normal geschrieben. Optionale Argumente sind in Eckklammern zu finden.
Sobald ein spezifischer Name Leerstellen enthält, muss er in ‚’ oder in „“ aufgeführt werden!

Datenbank erstellen

Neue Datenbank erstellen

Eine neue Datenbank wird mit dem Befehl „create database“ erstellt. Die Syntax des Befehls:

CREATE DATABASE Datenkbankname;
Wie alle SQL Befehle erwartet der Befehl „create database“ Argumente. In diesem Fall ist es nur ein Pflichtargument. Alle Argumente im Überblick (optionale Argumente immer in []):

Argument Beschreibung
[IF NOT EXISTS] Erstellt nur eine Datenbank, falls noch keine mit demselben Namen existiert.
[USER name] Teilt mit, welcher Benutzer Rechte auf die Datenbank hat
[PASSWORD pw] Teilt das Passwort des Users mit
Datenbankname Gibt den Namen der Datenbank an


Datenbank benutzen

Um eine Datenbank zu benutzen, verwendet man den „use“ Befehl. Um mit einer Datenbank arbeiten zu können, muss sie zuerst benutzt werden!

USE Datenbankname[;]
Wenn man den Namen der Datenbank nicht kennt, sollte man zuerst alle Datenbanken anzeigen lassen, was der „show databases“ Befehl übernimmt. Hier gibt es keine Argumente.

SHOW DATABASES;
Datenbank löschen

Wenn man eine Datenbank nicht mehr braucht, kann man sie mit dem „drop database“ Befehl löschen.

DROP DATABASE Datenbankname;
Argument Beschreibung
[IF EXISTS] Falls die Datenbank existiert, Fehlermeldungen werden verhindert
Datenbankname Gibt den Namen der Datenbank an


Tabellen erstellen & verwalten

Allgemeines

Die Datenbank dient nur als Container für Tabellen. Sämtliche Daten werden in Tabellen gespeichert. Der Tabellenname muss in jeder Datenbank eindeutig sein, am besten man verwendet einen logischen Namen. Eine SQL Tabelle besteht aus Spalten und Zeilen Jede Spalte hat einen Datentyp, der beschreibt, welche Daten (Text, Zahlen...) eingefügt werden können. Zusätzlich hat jede Spalte noch Attribute (Index, id...). Jede Zeile enthält einen Datensatz.

Tabelle erstellen

Eine Tabelle wird mit dem Befehl „create table“ erstellt. Vorher muss jeweils eine Datenbank benutzt werden.

CREATE TABLE Tabellenname
(
	Spalte 1 Datentyp [Attribute],
	Spalte n Datentyp [Attribute],
);
Für „Spalte“ kann man einen beliebigen (logischen) Namen eingeben.

Ein Beispiel:

CREATE TABLE t_personen
(
	Id integer not null auto_increment primary key,
	Vorname varchar(60) not null,
	nachname varchar(60) not null,
	alter varchar(25) not null,
);
Eine Übersicht über die Datentypen ist im Anhang A.

Mögliche Attribute:
Argument Beschreibung
[NOT NULL] Eintrag muss immer einen Wert bekommen. NULL steht für „nichts“ und nicht für 0!
[AUTO INCREMENT] Jeder neue Datensatz bekommt eine Nummer die automatisch um 1 erhöht wird. Hier müssen Zahlen verwendet werden!
[PRIMARY KEY] Die Spalte dient als Primärschlüssel, welcher jeden Datensatz eindeutig definiert.
[DEFAULT Standardwert] Definiert den Wert welcher eingefügt wird, wenn der Benutzer nichts einträgt.


Datentypen verändern

Falls ein gewisser Datentyp zu klein ist bzw. falsch ausgewählt wurde, kann man das mit einem CAST wieder ausbügeln.

CAST (Wert AS Datentyp);
Folgende Datentypen können umgewandelt werden:

NUMERIC	-	CHAR, VARCHAR, DATE
CHAR, VARCHAR	-	NUMERIC, DATE
DATE	-	CHAR, VARCHAR, DATE
Eingabeprüfung

Um festzulegen, welche Daten der Benutzer in die Tabelle eingeben kann, verwendet man Eingabeprüfungen. Diese werden beim Erstellen einer Tabelle mit dem Schlüsselwort CONSTRAINT definiert.

CONSTRAINT Prüfungsname CHECK(Spalte Vergleichsoperator Vergleichswert)
Eine Übersicht über alle möglichen Vergleichsoperatoren im Anhang B.

Tabellen anzeigen

Tabellen aus einer Datenbank können mit dem „show tables“ Befehl angezeigt werden.

1.	SHOW TABLES [FROM datenbankname] [LIKE „muster“];

2.	SHOW TABLES;
Mit dem Befehl 1 kann man beliebige Tabellen aus einer beliebigen Datenbank anzeigen lassen. Befehl 2 zeigt einfach alle Tabellen aus der geöffneten Datenbank. Als „muster“ kann man einen String eingeben, welcher dem gesuchten Tabellennamen entsprechen sollte.

Tabellenstrukturen verändern

Die Tabellenstruktur kann jederzeit mit dem „alter“ Befehl verändert werden. Auf diese Weise kann man nachträglich Spalten hinzufügen oder entfernen, Gültikeitsprüfungen einfügen oder Attribute und Datentypen von bestehenden Spalten ändern.

ALTER TABLE tabellenname
	ADD Spalte/Prüfung/...
Nach dem ADD Befehl verläuft die Definition gleich wie oben beschrieben.

Tabellen löschen

Das Löschen einer Tabelle funktioniert gleich wie das Löschen einer Datenbank. Man muss einzig die Datenbank, in welcher die Tabelle sich befindet mit dem „use“ Befehl geöffnet haben.

DROP TABLE Tabellenname;
Daten einfügen, bearbeiten und löschen

Daten einfügen

Daten werden mit dem Befehl „insert into“ in Tabellen gespeichert. Man kann ganze Datensätze oder nur einzelne Felder dabei ausfüllen.

INSERT INTO Tabellenname (Spalte 1, Spalte n)
	VALUES („Wert 1“, „Wert n“);
Man muss darauf achten, dass die aufgeführten Spalten immer mit den Datentypen der Werte übereinstimmen. Die Anzahl muss natürlich auch übereinstimmen. Reihenfolge beachten!

Man kann nicht nur manuelle Werte eingeben, man kann auch Ergebnisse von Abfragen in eine neue Tabelle einfügen lassen. Das erreicht man, wenn man einen „insert“ Befehl mit einem „select“ Befehl verknüpft. Diese „select“ Abfragen werden weiter unten noch erläutert.

Datenbestände aktualisieren

Um Mutationen an Daten vornehmen zu können, kann man den Befehl „update“ verwenden.

UPDATE Tabellenname SET Spalte 1 = Wert 1, Spalte n = Wert n WHERE Bedingung;
Nach dem „update“ Befehl wird der Tabellenname aufgeführt. Danach kommt der „set“ Teil. Man weist dort jeder Spalte einen Wert zu. Der „update“ Befehl macht ohne eine „where“ Abfrage wenig Sinn. Diese Abfrage dient dazu, dass man Daten gezielt aktualisieren kann. Da dieser Befehl etwas komplexer ist, ein kleines Beispiel:

UPDATE t_personen SET alter = „65 Jahre“ WHERE id = 1632;
Hier die Tabelle t_personen aktualisiert. Die Spalte alter bekommt den Wert „65 Jahre“ als String. Die Aktualisierung findet nur dort statt, wo die id 1632 beträgt.

Datenbestände löschen

Falls Datensätze ganz weg müssen, verwendet man den „delete“ Befehl.

DELETE FROM Tabellenname WHERE Bedingung;
Auch hier ist die Bedingung sehr wichtig, da man Daten meistens gezielt löschen möchte.

Abfragen

Die Select Anweisung

Alle Abfragen in SQL werden mit der „Select“ Anweisung gemacht. Diese Anweisung ist die komplexeste und wird am häufigsten angewendet. Es sind nicht nur Abfragen über eine Tabelle oder Teile einer Tabelle möglich, mit der Select Anweisung lassen sich beliebige Datenfelder abfragen. Man kann sehr genau bestimmen, welche Daten man sehen will und welche nicht.

Die einfachste Abfrage wird wohl so aussehen:

SELECT * FROM Tabellenname;
Der Stern bedeutet soviel wie „alles“. Mit dieser Abfrage bekommt man die ganze Tabelle auf einmal zu sehen. Diese Abfrage macht in der Praxis aber meistens so gut wie keinen Sinn, da Tabellen Tausende von Datensätzen enthalten können.

Um nur einzelne Spalten mit den zugehörigen Daten anzusehen, kann man statt des Sterns für „alles“ auch Spaltennamen eingeben.

SELECT Spalte 1, Spalte n FROM Tabellenname;
Alle Spalten müssen durch ein Komma getrennt werden.

Die „select“ Anweisung kann aber noch viel mehr. Die gesamte Syntax sieht so aus:

1.	SELECT [DISTINCT] */Datenfelder [AS Alias] FROM Tabellenname
2.	[WHERE Bedingung]
3.	[GROUP BY Datenfelder [HAVING Bedingung]]
4.	[ORDER BY Datenfelder [ASC/DESC]]
5.	[LIMIT [Start, ] Anzahl];
  1. Die Anweisung wird mit dem Schlüsselwort “SELECT” eingeleitet. Das optionale Argument DISTINCT verhindert, dass mehrfach auftretende Daten angezeigt werden. Man kann den * für alle Spalten, oder Datenfelder für bestimmte Spalten eingeben. Das Schlüsselwort „AS“ benennt die Spalte zum besseren Verständnis in einen Aliasnamen um. Zum Schluss kommt das Schlüsselwort „FROM“ und der Tabellenname.
  2. Das Schlüsselwort „WHERE“ verlangt eine Bedingung, so werden Datenbestände beschränkt.
  3. Das Schlüsselwort „GROUP BY“ gruppiert nach Datenfeldern. Hier kann man auch Bedingungen anfügen.
  4. Das Schlüsselwort „ORDER BY“ sortiert die Abfrage nach den angegebenen Datenfeldern. Man kann die Abfrage aufsteigend (ASC) und absteigend (DESC) sortieren.
  5. Mit dem Schlüsselwort „LIMIT“ kann man die Anzahl der Datensätze beschränken. Man kann den Startdatensatz und die Anzahl angeben.
Man kann auch berechnete Felder ausgeben lassen. Hier ein Beispiel:

SELECT anzahl, stueckpreis, anzahl*stueckpreis as wert FROM t_lagerbestand;
Hier wird eine Pseudo Spalte ausgegeben, welche als wert benannt ist und den Wert von anzahl*stueckpreis berechnet. Berechnungen in mySQL funktionieren nur mit integer und float Zahlen! Man kann nur die Grundoperationen (+, -, *, /) verwenden.

Bedingungen in der SELECT Abfrage

Das wichtigste an SQL Abfragen sind, dass genau die Daten herauskommen, die man braucht. Tabellen haben in der Praxis oft Tausende von Einträgen. Mit solchen Datenmengen kann man jedoch schlecht arbeiten. Um nur die Daten zu bekommen, die man verwenden will, muss man Bedingungen für SELECT Abfragen definieren. In mySQL werden alle Bedingungen mit dem Schlüsselwort WHERE an eine Abfrage angehängt. Neben Vergleichen (siehe Anhang B, Vergleichsoperatoren) kann man auch Vergleichsfunktionen verwenden. Eine kleine Übersicht:

Bedingung Beispiel Erklärung
Vergleichsoperatoren

Preis < 10'500

Name = „huber“
Vergleicht die Spalte jedes Datensatzes mit dem Vergleichswert
Bereichsprüfung Preis BETWEEN 99 AND 999 Prüft einen bestimmten Wertebereich
Elementprüfung Abteilung IN („Einkauf“, „Verkauf“) Prüft ob ein Listenelement aus der Liste nach dem Schlüsselwort IN in der Spalte vorkommt.
Mustervergleich Name LIKE „H%“ Prüft einen Feldinhalt auf Übereinstimmungen mit dem Muster
Nullwertprüfung Preis IS NULL Prüft, ob Datenfeld keinen Wert hat
Logische Operatoren Preis > 10 AND < 100 Bedingungen verknüpfen (AND, OR, NOT, XOR, NAND, NOR)


Mustervergleich

Oft sucht man in einer Datenbank nach bestimmten Strings, welche nicht immer 100%-ig bekannt sind. Sobald man Teile des Strings kennt, ist ein Mustervergleich praktisch. Hier gibt es bestimmte Platzhalter für Zeichen. Der Platzhalter _ steht für ein beliebiges Zeichen. Flexibler ist der Platzhalter %, der für eine beliebige Menge an Zeichen steht (auch 0 Zeichen).

Logische Operatoren

Wenn man mehrere WHERE Kriterien angeben will, müssen diese durch einen logischen Operator verbunden werden. Hier gibt es drei Möglichkeiten

AND		Beide Bedingungen müssen zutreffen
OR		Eine der beiden Bedingungen muss zutreffen
NOT		Die Verbindung darf nicht zutreffen
Man kann beliebig viele Kriterien angeben. Man muss einfach wissen, dass der AND Operator stärker bindet als der OR Operator. Natürlich kann man auch Klammern verwenden, wenn man die Operatorreihenfolge verändern will.

Abfrageergebnisse gruppieren

Ergebnisse zu gruppieren lohnt sich vor allem für statistische Zwecke. Man kann so z.B. erfahren, wieviele Angestellte in welcher Stadt wohnen. Oft benutzt man dazu ein COUNT() Feld, welches die Anzahl der Einträge ausgibt.

SELECT Spalten[, COUNT(Spalte)] FROM Tabellenname GROUP BY Spalte [Aggregatfunktion];
Sortierte Abfragen

Bei allen bisherigen Abfragen wurden die Datensätze in keiner speziellen Reihenfolge sortiert. Damit man das tun kann, ist die ORDER BY Funktion hilfreich.

SELECT Spalten FROM Tabellenname ORDER BY Spalte;
Schlüsselfelder und Indizes

Schlüssel

Ein Schlüssel identifiziert einen Datensatz in einer Tabelle. Es gibt drei Arten von Schlüsseln; Primärschlüssel, Sekundärschlüssel und Fremdschlüssel.

Ein Primärschlüssel identifiziert einen Datensatz in einer Tabelle eindeutig. Hier wird meistens der Datentyp Integer als auto_increment verwendet. Sie werden mit dem Attribut „PRIMARY KEY“ einer Spalte definiert. Um einen Primärschlüssel nachträglich in eine Tabelle einzufügen/zu löschen, kann man so vorgehen:

ALTER TABLE Tabellenname ADD PRIMARY KEY (Spalte);
ALTER TABLE Tabellenname DROP PRIMARY KEY;
Sekundärschlüssel dürfen pro Tabelle nur einmal vorkommen. Sie verhindern Mehrfachspeicherung von gleichen Daten. Mit dem Attribut „UNIQUE“ wird ein Sekundärschlüssel definiert. Um einen Sekundärschlüssel nachträglich hinzuzufügen/zu entfernen geht man so vor:

ALTER TABLE Tabellenname ADD UNIQUE (Spalte);
ALTER TABLE Tabellenname DROP UNIQUE;
Fremdschlüssel werden bei Tabellen angewendet, welche die Primärschlüssel von zwei anderen Tabellen in sich Vereinen und somit die beiden Tabellen verbinden. Das Erstellen von solchen Schlüsseln ist etwas komplizierter als bei den Primär/Sekundärschlüsseln. Zur Verdeutlichung ein Beispiel:

CREATE TABLE t_ma_proj
(
ma_id INTEGER NOT NULL,
proj_id INTEGER NOT NULL,
FOREIGN KEY (ma_id) REFERENCES t_ma (id),
FOREIGN KEY (proj_id) REFERENCES t_proj (id)
);
So lässt sich auch auf die Syntax schliessen:

CREATE TABLE Tabellenname
(
	Datenfeld1 Datentyp [Attribute],
	FOREIGN KEY (Spalte) REFERENCES Tabellenname (Spaltenname)
	[ON UPDATE|DELETE Referenzoption]
);
Hier wird eine Tabelle erstellt, welche zwei Tabellen miteinander verbindet. Es geht um eine n:m Verbindung!

Die ON UPDATE|DELETE Zeile ist sehr interessant. Hier geht es darum, die referenzielle Integrität zu wahren. Angenommen, es sind in einer Spalte Einträge von 1-4: Der Benutzer fügt nun in der anderen Tabelle einen Datensatz mit dem Wert 5 ein. Der Wert 5 existiert in der Verbindungstabelle aber noch nicht. Hier wird nun eine Fehlermeldung ausgegeben! Statt dieser Fehlermeldung kann man auch ON UPDATE|DELETE Aktionen bestimmen. Hier eine Übersicht:

Aktion Beschreibung
NO ACTION Anweisung wird abgebrochen
CASCADE Löschen: Alle Datensätze, welche auf diesen Wert verweisen werden gelöscht.
Aktualisieren: Alle referenzielle Datensätze werden in der anderen Tabelle ebenfalls geändert.
SET DEFAULT Alle referenzielle Felder werden auf den DEFAULT Wert gesetzt.
SET NULL Alle referenzielle Datensätze bekommen den Wert NULL


Indizes

Schlüssel werden jeweils zugleich als Index abgespeichert. Indizes beschleunigen die Suche bei grossen Datenmengen enorm. Sie brauchen jedoch auch etwas Platz, deshalb nimmt man meistens nur etwa den Nachnamen einer Person oder die Bezeichnung eines Produkts auf den Index (Werte, an die man sich erinnern kann).

Indizes erstellt man bei der Definition einer neuen Tabelle. So sieht die Syntax aus:

CREATE [ASC|DESC] INDEX Indexname ON Tabellenname (Spalte);
Mit dem Befehl „SHOW INDEX;“ kann man den Index der aktiven Datenbank anschauen.

Abfragen über mehrere Tabellen

Grundlagen

Die meisten Datenbanken bestehen nicht aus einer, sondern einer Vielzahl von Tabellen. Die Daten werden so verteilt, dass möglich keine Redundanzen und keine Anomalien entstehen. Damit man aber dennoch alle Daten logisch angeordnet betrachten und verwenden kann, muss man eine Abfrage über mehrere Tabellen machen. Diese Abfragen sind meistens aus der Mengenlehre abgeleitet.

Menge Erklärung
Vereinigungsmenge

Alle Datensätze aus beiden Tabellen werden angezeigt.
Schnittmenge

Es werden aus zwei oder mehreren Tabellen diejenigen Datensätze rausgesucht, welche in allen Tabellen vorkommen.
Differenzmenge

Es werden die Datensätze ermittelt, welche nur in einen der beiden Tabellen existiert.


Joins

Die verschiedenen Joins sind relativ schwer zu erklären, darum ein Beispiel.

Sämtliche Joins werden mit folgenden beiden Tabellen durchgeführt:

Id Name Vorname
1 Baumann Hans
2 Müller Adolf
3 Schmidt Josef
4 Hartmann Karl


Id Telefonnummer
1 123
7 456
10 789


Cross Join Das Kartesische Produkt wird gebildet; jeder Datensatz aus Tabelle 1 wird mit jedem Datensatz aus Tabelle 2 kombiniert. Wird selten verwendet.

Theta Join Es wird das kartesische Produkt gebildet. Dazu kommt noch eine WHERE Bedingung.
Inner-/Equi-Join Es werden nur die Datensätze angezeigt, deren Felder (id) entsprechen. Diese Verknüpfung wird am meisten verwendet.

Natural Join Wie der Equi Join, nur dass identische Datensätze ausgeblendet werden.

Left-Outer-Join Es werden alle Datensätze von der linken Tabelle und jeweils entsprechende Datensätze der Rechten dazugenommen. Wenn es bei einem Datensatz keine entsprechenden id’s hat, werden NULL Werte ausgegeben.
Right-Outer-Join Siehe Left-Outer-Join, einfach umgekehrt
Full-Outer-Join Alle Daten aus der linken und der rechten Tabelle werden herausgelesen. Entsprechende Datensätze werden einander zugeordnet, der Rest sind NULL Werte.
Semi-Join Zwei Tabellen werden über einen Natural-Join verbunden. Es werden nur die Spalten der ersten Tabelle angezeigt.
Self-Join Hier wird eine Tabelle mit sich selber verbunden.


Felder von verschiedenen Tabellen auswählen

Um Spalten von verschiedenen Tabellen anzeigen zu können, muss man den Tabellennamen mit einem Punkt von der Spalte trennen!

Tabellenname.Spalte
Der Cross-Join
Beim Cross Join werden alle Datensätze von zwei Tabellen angezeigt.

SELECT * FROM links, rechts;
SELECT * FROM links CROSS JOIN rechts [WHERE Bedingung];
Die Datensätze werden nicht logisch verknüpft, es werden alle Kombinationen angegeben.

Der Theta-Join

Dieser Join funktioniert eigentlich gleich, wie der Cross-Join, nur dass hier eine Bedingung ausgegeben wird.

SELECT * FROM links, rechts WHERE links.id > rechts.id;
SELECT * FROM links INNER JOIN rechts ON [Bedingung];
Auch dieser Join macht wenig praktischen Sinn.

Der Equi-Join/Inner-Join

Hier handelt es sich um den meistverwendeten Join in mySQL. Er wird fast gleich formuliert wie der Theta Join, nur werden hier die jeweiligen Primärschlüssel der Tabellen auf ihre Gleichheit überprüft.

SELECT * FROM links, rechts WHERE links.id = rechts.id;
SELECT * FROM links INNER JOIN rechts ON links.id = rechts.id [WHERE Bedingung];
Man bekommt exakt die Menge, in der es Übereinstimmungen beider Tabellen gibt.

Natural-Join

Wo der Equi-Join doppelte Datensätze ausgibt, werden diese beim Natural-Join ignoriert. Auch dieser Join wird häufig verwendet. Er unterscheidet sich nur durch das Schlüsselwort „DISTINCT“ vom Equi-Join.

SELECT DISTINCT * FROM links, rechts WHERE links.id = rechts.id;
SELECT DISTINCT * FROM links INNER JOIN rechts ON links.id = rechts.id [WHERE Bedingung];
Outer-Join

Wenn man alle Datensätze mit den zugehörigen Datensätzen einer anderen Tabelle sehen will, nimmt man den Equi-Join. Wenn man aber alle Datensätze ansehen will, wird der Outer-Join verwendet. Alle Datensätze, die keine Zugehörigkeit zu einem anderen haben, bekommen NULL Werte in die leeren Spalten.

Hier gibt es zwei Arten: Den left-Outer-Join und den right-Outer-Join. Der Unterschied ist, dass beim left-Outer-Join alle Datensätze der linken Tabelle und beim right-Outer-Join alle Datensätze der rechten Tabelle angezeigt werden!

SELECT * FROM links RIGHT|LEFT OUTER JOIN rechts ON Bedingung;
Der Self-Join

Man kann auch eine Tabelle mit sich selbst verknüpfen. Hier muss man jedoch für beide Tabellen einen Aliasnamen angeben.

SELECT * FROM links AS tbl1 INNER JOIN links AS tbl2 ON Bedingung;
Zugriffsrechte und Benutzer

Grundlagen

In einer mySQL Datenbank hat jeweils derjenige alle Rechte über ein Datenbankobjekt, welcher das Objekt erstellt hat. Die anderen Benutzer haben dann keine Rechte über dieses Objekt. Der Datenbankadministrator hat alle Rechte auf alle Objekte! Dieser heisst in mySQL standardmässig „root“ und hat kein Passwort.

Benutzer anlegen

In mySQL werden alle Benutzer in die Tabelle „user“ gespeichert. Das Erfassen neuer User erfolgt also gleich wie das eintragen in eine herkömmliche Tabelle. Folgende Felder müssen ausgefüllt werden:

Host		Host, von welchem der User zugreifen kann
User		Benutzername
Password	Passwort es Benutzers, wird mit password(„Passwort“) verschlüsselt
Mögliche Werte für den Host:

Wert Erklärung
% Alle Computer im Netzwerk
Localhost Lokaler Computer, auf dem mySQL installiert ist
db.testserver.net Computer mit Domainnamen db.testserver.net
%.testserver.net Alle Computer der Domain testserver.net
Server Computer mit dem Namen „Server“


Zugriffsrechte vergeben

Ein neu erstellter User hat zuerst keine Rechte. Diese kann man ihm mit der Anweisung „Grant“ zusprechen.

GRANT Rechte ON Datenbankobjekt TO User;
Recht Erklärung
ALL Alle Rechte auf das Datenbankobjekt
SELECT Leserecht, SELECT Anweisung
UPDATE Recht zum Ändern von Datensätzen, UPDATE Anweisung
INSERT Recht zum Einfügen von neuen Datensätzen, INSERT Anweisung
DELETE Recht zum Löschen von Datensätzen, DELETE Anweisung
REFERENCES Recht zur Regeldefinition über die referenzielle Integrität


Man kann dem Benutzer auch nur das Recht über bestimmte Spalten gewähren.

GRANT UPDATE (Spalte) ON Tabelle TO User;
Zugriffsrechte vererben

Jeder Benutzer kann seine Rechte an einen beliebigen anderen User weitergeben.

GRANT ALL ON Tabelle TO User WITH GRANT OPTION;
Zugriffsrechte entziehen

Um Benutzerrechte zu entziehen, verwendet man die „REVOKE“ Anweisung.

REVOKE Recht ON Tabelle FROM User;
Anhang A

Datentypen

Datentyp Erklärung
char(Anzahl) zum Speichern von Text, maximal [Anzahl] Zeichen lang. Hier werden auch leere Character abgespeichert.
varchar(Anzahl) zum Speichern von Text, maximal [Anzahl] Zeichen lang. Es werden nur verwendete Character abgespeichert.
text Datentyp zum Speichern von Text, unbegrenzter Grösse
blob zum Speichern von grossen Daten, wie z.B. Bilder und Videos (binäre Files)
smallint Zahl von –32758 bis 32767
integer Zahl von –2147483648 bis 2147483647
float Zahl mit 7 Nachkommastellen
double precision Zahl mit 15 Nachkommastellen
date Datumsangaben mit verschiedenen Eingabeformaten
numeric(x, y) eigener Zahlendatentyp mit x Nachkommastellen und y Vorkommastellen
decimal(x, y) siehe numeric, jedoch werden nur nötige Nachkommastellen geliefert (keine Nullstellen am Schluss)


Anhang B

Bedingungsoperatoren

Operator Erklärung
< kleiner als
> grösser als
<> ungleich
= gleich
>= grösser gleich
<= kleiner gleich


Anhang C

Bedingungsoperatoren

Funktion Erklärung
COUNT(Spalte) liefert die Anzahl Werte der Spalte
COUNT(DISTINCT Spalte) liefert die Anzahl der unterschiedlichen Werte der Spalte
AVG(Spalte) liefert den Durchschnittswert der Spalte
MIN(Spalte)
MAX(Spalte)
liefert den kleinsten/grössten Wert der Spalte
SUM(Spalte) liefert die Summe der Spalte


Mathematische Funktionen

Funktion Erklärung
ABS(zahl) liefert absoluten Wert
CEILING(zahl) rundet auf
FLOOR(zahl) rundet ab
ROUND(zahl[,stellen]) rundet auf Anzahl Stellen
LOG(zahl) liefert den Logarithmus
MOD(zahl1, zahl2) liefert Rest der Ganzzahldivision
PI() liefert Pi
RAND() Zufallszahl von 0 bis 1
SIGN(zahl) stellt fest ob eine Zahl negativ oder positiv ist.
SIN(zahl)
COS(zahl)
TAN(zahl)
liefert Winkelfunktionen
SQRT(zahl) Quadratwurzel


Zeichenkettenfunktionen

Funktion Erklärung
Ascii(„string“) liefert den Ascii Wert des ersten Characters der Zeichenkette
Char(zahl) wandelt den Ascii Wert in einen Character um
Length(„string“) liefert die Länge der Zeichenkette
Lower(„string“)
Upper(„string“)
macht aus einer Zeichenkette Gross-/Kleinbuchstaben
Ltrim(„string“)
Rtrim(„string“)
entfernt überflüssige Leerstellen von links/rechts
Substring(„string“, anfang, ende) liefert Teil des Strings von Stelle Anfang bis Ende


paedubucher
Professonial
Beitrag vom:
02-05-2007, 17:48:57

Abschlussprüfung

Ich bin gerade am Erstellen einer SQL-Zusammenfassung für meine Abschlussprüfung. Ich habe gar nicht mehr gewusst, dass ich sowas überhaupt mal geschrieben habe! Das wird mir einiges an Arbeitsaufwand sparen :-)

-----------------------------------------------------


incsoft
Professonial
Beitrag vom:
26-04-2004, 21:05:11

Sehr gut (plus)

Da haste dir richtig viel Mühe gegeben. Und die soll belohnt werden: 10 Punkte :-).

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0