En MySQL, las tablas InnoDB soportan
        restricciones de claves foráneas. Consulte
        Capítulo 15, El motor de almacenamiento InnoDB. Consulte también
        Sección 1.7.5.5, “Claves foráneas (foreign keys)”.
      
        No se requiere una restricción de clave foránea para
        simplemente unir dos tablas. Para otros tipos de tabla que no
        sean InnoDB, es posible, al momento de
        definir una columna, utilizar una cláusula
        REFERENCES, la cual no
        tiene efecto real y funciona solamente como un
        recordatorio o comentario de que la columna que se está
        definiendo está dirigida a hacer referencia a una columna en
        otra tabla. Al emplear esta sintaxis es muy
        importante comprender que:
      tbl_name
        (col_name)
            MySQL no efectúa ningún tipo de CHECK o
            comprobación para asegurarse de que
            col_name realmente existe en
            tbl_name (o incluso que
            tbl_name existe).
          
            MySQL no realiza ningún tipo de acción sobre
            tbl_name tal como borrar filas en
            respuesta a acciones ejecutadas sobre filas en la tabla que
            se está definiendo; en otras palabras, esta sintaxis no
            produce por sí misma un comportamiento ON
            DELETE u ON UPDATE. (Inclusive
            cuando se puede escribir una cláusula ON
            DELETE u ON UPDATE como parte
            de la cláusula REFERENCES, estas son
            también ignoradas).
          
Esta sintaxis crea una columna; no crea ninguna clase de índice o campo clave.
            Esta sintaxis causará un error si se la emplea durante la
            definición de una tabla InnoDB.
          
Una columna creada de esta forma se puede utilizar como columna de unión, como se muestra aquí:
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 |
+----+-------+--------+-------+
        Cuando se usa de esta manera, la cláusula
        REFERENCES no es mostrada en la salida de
        SHOW CREATE TABLE o
        DESCRIBE:
      
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
        El uso de REFERENCES como comentario o
        "recordatorio" en la definición de una columna
        funciona en tablas MyISAM y
        BerkeleyDB.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

