Bei MySQL unterstützen InnoDB-Tabellen die
        Überprüfung von Fremdschlüsselbeschränkungen. Siehe auch
        Abschnitt 14.2, „InnoDB-Tabellen“, und
        Abschnitt 1.9.5.5, „Fremdschlüssel“.
      
        Eine Fremdschlüsselbeschränkung ist nicht erforderlich, wenn
        Sie lediglich zwei Tabellen miteinander verknüpfen wollen. Bei
        anderen Speicher-Engines als InnoDB ist dies
        möglich, indem eine Spalte zur Verwendung einer
        REFERENCES
        -Klausel
        definiert wird; diese hat keine eigentliche Wirkung und
        dient Ihnen lediglich als Erinnerung oder Anmerkung,
        damit Sie daran denken, dass die derzeit definierte Spalte auf
        eine Spalte in einer anderen Tabelle verweisen soll.
        Es ist bei Verwendung dieser Syntax extrem wichtig, sich zu
        vergegenwärtigen, dass
      tbl_name(col_name)
            MySQL keinerlei Überprüfung durchführt, um
            sicherzustellen, dass col_name
            tatsächlich in tbl_name
            vorhanden ist (bzw. dass tbl_name
            selbst existiert),
          
            MySQL keine Aktionen an tbl_name
            – wie etwa das Löschen von Datensätzen – als Reaktion
            auf Aktionen ausführt, die an Datensätzen in der von Ihnen
            gerade definierten Tabelle vorgenommen werden (mit anderen
            Worten, diese Syntax enthält keine Funktionalität wie etwa
            ON DELETE oder ON
            UPDATE; Sie können zwar eine ON
            DELETE- oder ON UPDATE-Klausel
            als Bestandteil der REFERENCES-Klausel
            schreiben, aber diese wird ebenfalls ignoriert),
          
diese Syntax eine Spalte erstellt (und keinerlei Index oder Schlüssel),
            diese Syntax einen Fehler erzeugt, wenn damit eine
            InnoDB-Tabelle zu erzeugen versucht wird.
          
Sie können eine Spalte, die als Join-Spalte erstellt wurde, wie nachfolgend gezeigt verwenden:
CREATE TABLE person (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    name CHAR(60) NOT NULL,
    PRIMARY KEY (id)
);
CREATE TABLE shirt (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
    owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
    PRIMARY KEY (id)
);
INSERT INTO person VALUES (NULL, 'Antonio Paz');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', @last),
(NULL, 'polo', 'red', @last),
(NULL, 'dress', 'blue', @last),
(NULL, 't-shirt', 'white', @last);
SELECT * FROM person;
+----+---------------------+
| id | name                |
+----+---------------------+
|  1 | Antonio Paz         |
|  2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirt;
+----+---------+--------+-------+
| id | style   | color  | owner |
+----+---------+--------+-------+
|  1 | polo    | blue   |     1 |
|  2 | dress   | white  |     1 |
|  3 | t-shirt | blue   |     1 |
|  4 | dress   | orange |     2 |
|  5 | polo    | red    |     2 |
|  6 | dress   | blue   |     2 |
|  7 | t-shirt | white  |     2 |
+----+---------+--------+-------+
SELECT s.* FROM person p, shirt s
 WHERE p.name LIKE 'Lilliana%'
   AND s.owner = p.id
   AND s.color <> 'white';
+----+-------+--------+-------+
| id | style | color  | owner |
+----+-------+--------+-------+
|  4 | dress | orange |     2 |
|  5 | polo  | red    |     2 |
|  6 | dress | blue   |     2 |
+----+-------+--------+-------+
        Wenn sie auf diese Weise eingesetzt wird, wird die
        REFERENCES-Klausel in der Ausgabe von
        SHOW CREATE TABLE oder
        DESCRIBE nicht angezeigt:
      
SHOW CREATE TABLE shirt\G
*************************** 1. row ***************************
Table: shirt
Create Table: CREATE TABLE `shirt` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`style` enum('t-shirt','polo','dress') NOT NULL,
`color` enum('red','blue','orange','white','black') NOT NULL,
`owner` smallint(5) unsigned NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
        Die Verwendung von REFERENCES als derartigen
        Kommentar oder „Erinnerung“ in einer
        Spaltendefinition funktioniert sowohl mit
        MyISAM- als auch mit
        BerkeleyDB-Tabellen.
      
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

