HINWEIS
BEISPIEL
HINWEIS
SQL-Typ Beschreibung
COUNTER Zählerfeld
IDENTITY(Start, Inkrement) Zählerfeld mit beliebigem Startwert und beliebigem Inkrement
CURRENCY/MONEY Währung
DATETIME Datum/Uhrzeit
SINGLE Single
DOUBLE Double
SHORT Integer
LONG Long
LONGTEXT Memo
LONGBINARY Binärfeld
TEXT/VARCHAR Textfeld
BIT Boolean
Tabelle 8.22 SQL-Datentypen für Access-Datenbanken
Die Feldgröße ist nur bei Textfeldern interessant, in allen anderen Fällen können Sie diesen Parameter weg-
lassen.
Der Parameter WITH COMPRESSION ist nur im Zusammenhang mit Text- bzw. Memofeldern von
Bedeutung. Im Wesentlichen geht es darum, derartige Spalten zu komprimieren. Hintergrund ist der
Unicode-Zeichensatz, der statt einem zwei Bytes pro Zeichen verwendet.
Anlegen einer Tabelle
Personal.
CREATE TABLE Personal(
name TEXT (30),
vorname TEXT (20),
geboren DATETIME,
gehalt CURRENCY,
bemerkung LONGTEXT)
Sollten Sie versuchen, ein Feld mit der Bezeichnung Alter anzulegen, vergessen Sie nicht die eckigen Klam-
mern, denn bei ALTER handelt es sich um ein reserviertes Wort!
Indizes
Dass Sie mit CREATE TABLE auch Indizes anlegen können, zeigen die folgenden Ausführungen. Die
Unterscheidung zwischen Hauptindex (Primary Key) und eindeutigem Index (Unique Key) wird auch bei
der Definition über SQL-Anweisungen beibehalten.
489
Datenbankverwaltung mit SQL (DDL)
BEISPIEL
BEISPIEL
BEISPIEL
BEISPIEL
Kapitel 8: SQL in Theorie und Praxis
CONSTRAINT-Klausel
Erweitern Sie zu diesem Zweck die CREATE TABLE-Anweisung um eine CONSTRAINT-Klausel.
Das Feld
nr
wird als Hauptindex festgelegt.
CREATE TABLE Personen(
nr COUNTER CONSTRAINT Primary Key, name TEXT (30))
Bei der CONSTRAINT-Klausel müssen Sie zwischen zwei Typen unterscheiden:
(Einfacher Index)
CONSTRAINT Name
{PRIMARY KEY | UNIQUE | REFERENCES Fremdtabelle [(Fremdfeld)]}
(Mehr-Felder-Index)
CONSTRAINT Name
{PRIMARY KEY (Primär1[, Primär2 [, ...]]) |
UNIQUE (Eindeutig1[, Eindeutig2 [, ...]]) |
FOREIGN KEY (Ref1[, Ref2 [, ...]])
REFERENCES Fremdtabelle [(Fremdfeld1 [, Fremdfeld2 [, ...]])]}
Eindeutiger Index für das Feld
nr
CREATE TABLE Personen(
nr COUNTER CONSTRAINT [nr] UNIQUE,
vorname TEXT (30),
nachname TEXT (25),
geburtsdatum DATETIME );
Hauptindex
CREATE TABLE Personen(
nr COUNTER CONSTRAINT [nr] PRIMARY KEY,
vorname TEXT (30),
nachname TEXT (25),
geburtsdatum DATETIME );
Zusammengesetzter Index (Vorname, Nachname)
CREATE TABLE Personen(
vorname TEXT (30),
nachname TEXT (25),
geburtsdatum DATETIME,
CONSTRAINT index1 (vorname, nachname));
490
BEISPIEL
BEISPIEL
BEISPIEL
Beziehungen festlegen
Mit der CONSTRAINT-Klausel können Sie nicht nur Indizes anlegen, sondern sogar Beziehungen zwi-
schen Tabellen festlegen.
Erstellen einer Tabelle
Personal
, die über das Feld
raum
eine Relation mit der Tabelle
Räume
herstellt.
CREATE TABLE Personal(
nr COUNTER CONSTRAINT nr UNIQUE,
vorname TEXT (30),
nachname TEXT (25),
raum LONG,
CONSTRAINT beziehung1 FOREIGN KEY (raum) REFERENCES [Räume] );
oder:
CREATE TABLE Personal(
nr COUNTER CONSTRAINT [nr] UNIQUE,
vorname TEXT (30),
nachname TEXT (25),
raum LONG CONSTRAINT beziehung1 REFERENCES [Räume] );
Abbildung 8.93 Die Relation zwischen den beiden Tabellen
Vielleicht haben Sie bisher ein Beispiel für einen einfachen Index vermisst? Der Grund dafür ist, dass dieser
nur mit der CREATE INDEX-Anweisung angelegt werden kann.
CREATE INDEX
CREATE [UNIQUE] INDEX <Indexname> ON <Tabellenname>
(Feld [ASC|DESC][, Feld [ASC|DESC], ...]) [WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
Wie Sie sehen, ist es mit CREATE INDEX auch möglich, die Sortierreihenfolge zu beeinflussen, was bei
CONSTRAINT nicht machbar ist.
Indizieren des Feldes
Nachname
in der Tabelle
Personal.
CREATE INDEX Nachname ON Personal(Nachname)
Indizieren des Feldes
Nachname
in der Tabelle
Personal
in absteigender Reihenfolge (Z ... A).
CREATE INDEX Nachname ON Personal(Nachname DESC)
491
Datenbankverwaltung mit SQL (DDL)

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.