MySQL-Primärschlüssel verstehen
Primärschlüssel dienen als eindeutige Bezeichner für die Datensätze in einer Tabelle, während Fremdschlüssel verwendet werden, um verwandte Tabellen miteinander zu verbinden. Beim Entwurf einer Reihe von Datenbanktabellen ist es wichtig zu spezifizieren, welche Felder für Primär- und Fremdschlüssel verwendet werden, um sowohl die Struktur innerhalb der Tabelle als auch die Beziehungen zwischen den Tabellen zu verdeutlichen.
Primärschlüssel
Sie können einen Primärschlüssel für die Tabelle mit der Einschränkung PRIMARY KEY spezifizieren. In einem gut durchdachten Datenbankschema dient ein Primärschlüssel als unveränderlicher, eindeutiger Bezeichner für jeden Datensatz. Wenn ein Schlüssel als Primärschlüssel deklariert ist, bedeutet dies in der Regel, dass die Werte darin selten geändert werden.
Die PRIMARY KEY-Beschränkung kann man sich am besten als eine Kombination der NOT NULL- und UNIQUE-Beschränkungen vorstellen, da sie erfordert, dass Werte im angegebenen Feld weder NULL sind noch in einer anderen Zeile wiederholt werden. Betrachten Sie das folgende Beispiel, das durch das Festlegen des numerischen Feldes AirportID als Primärschlüssel für die Tabelle Airport demonstriert wird.
mysql> CREATE TABLE airport ( -> AirportID smallint(5) unsigned NOT NULL, -> AirportCode char(3), -> AirportName varchar(255) NOT NULL, -> CityName varchar(255) NOT NULL, -> CountryCode char(2) NOT NULL, -> NumRunways INT(11) unsigned NOT NULL, -> NumTerminals tinyint(1) unsigned NOT NULL, -> PRIMARY KEY (AirportID) -> ) ENGINE=MYISAM;Query OK, 0 rows affected (0.05 sec)
Da das Feld AirportID in dieser Situation als Primärschlüssel definiert ist, lässt MySQL keine Duplikation oder NULL-Werte in diesem Feld zu. Auf diese Weise kann der Datenbankadministrator sicherstellen, dass jeder in der Tabelle aufgeführte Flughafen einen eindeutigen numerischen Wert hat, wodurch ein hohes Maß an Konsistenz der gespeicherten Daten erzwungen wird.
PRIMARY KEY-Beschränkungen können entweder für ein einzelnes Feld oder für eine Zusammensetzung aus mehreren Feldern angegeben werden. Das folgende Beispiel demonstriert dies anhand einer Tabelle, die einen zusammengesetzten Primärschlüssel enthält:
mysql> CREATE TABLE flightdep ( -> FlightID SMALLINT(6) NOT NULL, -> DepDay TINYINT(4) NOT NULL, -> DepTime TIME NOT NULL, -> PRIMARY KEY (FlightID, DepDay, DepTime) -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.96 sec)
In diesem Fall erlauben die Tabellenregeln die Wiederholung der Flugnummer, des Abflugtages oder der Abflugzeit, aber nicht von allen dreien zusammen. Schauen Sie, was passiert, wenn Sie es versuchen:
mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');Query OK, 1 row affected (0.20 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,2,'00:01');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:02');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');ERROR 1062 (23000): Duplicate entry '511-1-00:01:00' for key 'PRIMARY'
Zusammengesetzte Primärschlüssel können nützlich sein, wenn ein Datensatz durch eine Kombination seiner Attribute eindeutig identifiziert werden soll, anstatt nur durch ein einzelnes Attribut.