Künstliche numerische Primärschlüssel in MySQL (Künstliche numerische Primärschlüssel in MySQL), Programm, Seite 723059
https://www.purl.org/stefan_ram/pub/kuenstliche_mysql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Primärschlüsselspalten in MySQL 

Primärschlüssel

Eine bestimmte Spalte (oder eine Kombination von Spalten) einer jeden Tabelle kann und sollte in MySQL  als „Primärschlüssel“ festgelegt werden. Eine Tabelle kann höchstens einen  solchen Primärschlüssel haben.

Integritätsregeln

Wir nennen eine Spalte eindeutig, wenn jeder Wert dieser Spalte in höchstens einer Zeile der Tabelle vorkommen darf. In diesem Sinne kann man die erste Regel auch als „Der Primärschlüssel muß eindeutig sein.“ formulieren.

Empfehlung künstlicher numerischer Primärschlüssel

Es ist wahrscheinlich günstig, ausschließlich künstliche numerische Primärschlüssel  (KNP s) zu verwenden, weil nur so deren Eindeutigkeit garantiert werden kann.

Namen der Spalte des Primärschlüssels

In diesem Kurs wird der Spalte mit dem Primärschlüssel oft derselbe Namen  gegeben wie der Tabelle. Dies hat folgende Vorteile:

Primärschlüssels in InnoDB 

Bei Verwendung von InnoDB  sollten Primärschlüssel nur kurz sein (was auch sonst empfehlenswert erscheint). Das heißt beispielsweise, daß ein Primärschlüssel eine Zahl  oder ein kurzer Text  sein sollte.

Kennzeichnung des Primärschlüssels

Es ist möglich und empfohlen, dem Datenbanksystem ausdrücklich mitzuteilen, daß eine Spalte den Primärschlüssel einer Tabelle enthalten soll. Hierzu wird dem Datentyp die Angabe »PRIMARY KEY« nachgestellt. Das Datenbanksystem stellt dann sicher, daß kein Wert in dieser Spalte mehrfach vorkommt, also daß der Primärschlüssel eindeutig eine bestimmte Zeile identifiziert.

Konsole

DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE ZETA
( ZETA VARCHAR ( 255 ) PRIMARY KEY,
IOTA VARCHAR ( 255 ) );

INSERT INTO ZETA ( ZETA, IOTA ) VALUES ( '1', 'ANTON' );

INSERT INTO ZETA ( ZETA, IOTA ) VALUES ( '2', 'ANTON' );

SELECT * FROM ZETA;

+------+-------+
| ZETA | IOTA |
+------+-------+
| 1 | ANTON |
| 2 | ANTON |
+------+-------+

2 rows in set

Die Kennzeichnung einer Primärschlüsselspalte kann auch am Ende der Liste der Spaltenfestlegungen hinter einem Komma erfolgen, indem der Spaltenname in runden Klammern hinter »PRIMARY KEY« geschrieben wird.

Konsole
CREATE TABLE GAMMA 
( GAMMA VARCHAR ( 255 ),
DELTA VARCHAR ( 255 ),
PRIMARY KEY( GAMMA ));
Query OK, 0 rows affected

Die Angabe einer Einschränkung bei einer Spalte wird auch Spalteneinschränkung (column constraint ) genannt. Die Angabe einer Einschränkung für die Tabelle wird auch Tabellenvariableneinschränkung (table constraint ) genannt.

Tabellenvariableneinschränkungen können auch Einschränkungen ausdrücken, die mehrere Spalten gemeinsam betreffen, wie wir später sehen werden.

Primärschlüssel mit mehreren Spalten

Es ist auch möglich, einen Primärschlüssel mit mehreren Spalten festzulegen.

Konsole
CREATE TABLE ALPHA
( GAMMA VARCHAR ( 255 ),
DELTA VARCHAR ( 255 ),
KAPPA VARCHAR ( 255 ),
PRIMARY KEY( GAMMA, DELTA ));
Query OK, 0 rows affected

Ein Wert des Primärschlüssel in einer Zeile setzt sich dann aus den Werte seiner einzelnen Spalten in jener Zeile zusammen.

Die NULL-Integritätsregel lautet dann:

DESCRIBE

In der folgenden Tabellenbeschreibung enthält die Spaltenbeschreibung der Primärschlüsselspalte in der Spalte »Key« das Kürzel »PRI«.

STADT

DESCRIBE ALPHA;

+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| GAMMA | varchar(255) | NO | PRI | NULL | |
| DELTA | varchar(255) | NO | PRI | NULL | |
| KAPPA | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+

Übungsaufgaben (10')

/   Tabelle anlegen (5')

Für eine Tabelle mit den beiden Spalten »Kundennummer« und »Nachname« wird festgelegt:

Legen Sie diese Tabelle mit MySQL  an, wobei in der Aufgabenstellung fehlende Angaben von Ihnen festgelegt werden können.

Die Spalte mit der Kundennummer soll als Primärschlüssel gekennzeichnet werden.

Fügen Sie zwei Zeilen mit realistischen Nachnamen in die Tabelle ein. Versuchen Sie auch, Zeilen einzufügen, welche gegen die Integritätsregeln („Zu jedem Primärschlüsselwert darf es höchstens eine Zeile in der Tabelle geben“ und „In der Tabelle darf keine Zelle einer Primärschlüsselspalte den Wert »NULL« enthalten.“) verstoßen.

Aussprachehinweis
duplicate (a) ˈduːplɪkət

/   Tabelle anlegen (5')

Für eine Tabelle mit den beiden Spalten »Kursnummer« und »Personennummer« wird festgelegt:

Legen Sie diese Tabelle mit MySQL  an, wobei in der Aufgabenstellung fehlende Angaben von Ihnen festgelegt werden können.

Beide Spalten zusammen sollen als Primärschlüssel gekennzeichnet werden.

Fügen Sie zwei Zeilen in die Tabelle ein, indem Sie beim Einfügen Werte für beide Spalten angeben. Versuchen Sie auch, Zeilen einzufügen, welche gegen die Integritätsregeln („Zu jedem Primärschlüsselwert darf es höchstens eine Zeile in der Tabelle geben“ und „In der Tabelle darf keine Spalte des Primärschlüssel irgendwo den Wert »NULL« enthalten.“) verstoßen.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723059 stefan_ram:723059 Künstliche numerische Primärschlüssel in MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723059, slrprddef723059, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/kuenstliche_mysql