relacionar - llaves foraneas mysql xampp
La desaparición de las claves foráneas en phpMyAdmin (4)
Estoy creando una nueva tabla dentro de mysql y estoy tratando de agregar una restricción de clave externa a uno de los campos.
CREATE TABLE `onlineorder` ( `receiptid` varchar(10) NOT NULL default '''', `delivereddate` date default NULL, `cid` int(10) NOT NULL, `card#` int(10) default NULL, `expire` date default NULL, PRIMARY KEY (`receiptid`), FOREIGN KEY (receiptid) REFERENCES purchase ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Sin embargo, después de que lo crea, voy a phpMyAdmin y exporto la tabla. y parece que la restricción de la clave externa ha desaparecido.
CREATE TABLE `onlineorder` ( `receiptid` varchar(10) NOT NULL default '''', `delivereddate` date default NULL, `cid` int(10) NOT NULL, `card#` int(10) default NULL, `expire` date default NULL, PRIMARY KEY (`receiptid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
¿PhpMyAdmin se deshace de las claves externas o estoy haciendo algo mal aquí?
Necesita usar el motor InnoDB para tener claves externas.
Ref: http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Cuando define una tabla con el motor de almacenamiento MyISAM, acepta restricciones FOREIGN KEY
, pero silenciosamente las descarta. Los analiza, pero no almacena la restricción en los metadatos de la tabla y, posteriormente, no puede aplicar la restricción. Cuando solicita ver la idea de la base de datos de la definición de la tabla, no sabe nada sobre esa restricción, como ha descubierto.
Lo mismo ocurre con las restricciones CHECK
(independientemente del motor de almacenamiento); analiza la sintaxis y la acepta, pero luego la ignora.
En mi humilde opinión, esto es algo terrible para el producto MySQL. Acepta SQL estándar sin errores, dejándole la impresión de que va a admitir la restricción de la manera estándar. ¡Pero no es así! Ni siquiera SHOW WARNINGS
revela que MySQL ha ignorado la restricción.
Si usa el motor de almacenamiento InnoDB, no presiona la restricción de clave externa.
Además, PHPMyAdmin elimina extractos de RESTRICCIONES hasta que se hayan creado todas las tablas y se hayan insertado los datos. Si utiliza como PHPMySql para volcar la tabla por usted, encontrará al final del archivo una sección de la tabla ACTUALIZAR con todas sus entradas ADD CONSTRAINT.
Hay dos tipos de restricciones cuando administra sus tablas con phpmyadmin:
- interno: cuando establece restricciones con el diseñador de phpmyadmin, por ejemplo, las restricciones almacenadas como internas, que no se incluirán en la exportación.
- innoDB: estas restricciones incluidas en el check-out de exportación de video vinculado al respecto
[Video: Configuración de una restricción de clave externa] [1]