Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Error 1215: Cannot add foreign key constraint

Estas en el tema de Error 1215: Cannot add foreign key constraint en el foro de Mysql en Foros del Web. Hola a todos, Tengo el "Error 1215:Cannot add foreign key constraint" al crear una tabla con tres foreing keys. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 24/11/2013, 05:20
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 11 años
Puntos: 0
Error 1215: Cannot add foreign key constraint

Hola a todos,

Tengo el "Error 1215:Cannot add foreign key constraint" al crear una tabla con tres foreing keys.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS historic
  2.   dataini DATE NOT NULL CHECK(dataini>=datafi),
  3.   datafi DATE,
  4.   codClub TINYINT(2) UNSIGNED NOT NULL,
  5.   nomGols SMALLINT(3) UNSIGNED,
  6.   codEsp TINYINT(2) UNSIGNED default 1 NOT NULL,
  7.   imports SMALLINT(3) UNSIGNED,
  8.   FOREIGN KEY (codJug) REFERENCES jugador (codJug) ON DELETE SET NULL ON UPDATE CASCADE,
  9.   FOREIGN KEY (codClub) REFERENCES club (codClub) ON DELETE SET NULL ON UPDATE CASCADE,
  10.   FOREIGN KEY (codEsp) REFERENCES especialitat (codEsp) ON DELETE SET NULL ON UPDATE CASCADE
Las entidades a las que hay que relacionar son:
Código MySQL:
Ver original
  1. CREATE TABLE `jugador` (
  2.   `codJug` smallint(3) unsigned NOT NULL,
  3.   `alcada` double DEFAULT '1.7',
  4.   `pes` double DEFAULT '70',
  5.   PRIMARY KEY (`codJug`),
  6.   CONSTRAINT `jugador_ibfk_1` FOREIGN KEY (`codJug`) REFERENCES `persona` (`codP`) ON DELETE CASCADE ON UPDATE CASCADE
Código MySQL:
Ver original
  1. CREATE TABLE `club` (
  2.   `codClub` tinyint(2) unsigned NOT NULL,
  3.   `nomClub` varchar(30) NOT NULL,
  4.   `numSoc` int(11) DEFAULT NULL,
  5.   PRIMARY KEY (`codClub`),
  6.   UNIQUE KEY `nomClub` (`nomClub`)

Código MySQL:
Ver original
  1. CREATE TABLE `especialitat` (
  2.   `codEsp` tinyint(2) unsigned NOT NULL,
  3.   `nom` varchar(30) NOT NULL,
  4.   `descr` varchar(50) DEFAULT 'Sense descripcio',
  5.   PRIMARY KEY (`codEsp`),
  6.   UNIQUE KEY `nom` (`nom`)

Como veis las restricciones son las mismas en las tablas principles que en la tabla ha crear. ¿A que puede deverse este error?

Muchas gracias,
Jose Luis,

Última edición por gnzsoloyo; 24/11/2013 a las 06:17
  #2 (permalink)  
Antiguo 24/11/2013, 06:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error 1215: Cannot add foreign key constraint

Ese error se da habitualmente en cuatro casos (no exclusivamene):
1) Los tipos de columna no corresponden entre PK y FK.
2) Se intenta una FK desde un campo simple a una clave compuesta.
3) Existen datos en la tabla con la FK que no existen en la tabla referida (valores ilegales).
4) El orden de creacion de las tablas es incorrecto (las que tienen FK deben ser las últimas).

Este tema es recurrente en el foro. Usa el buscador para encontrarlos si quieres ver analisis más completos.

Por cierto: La constraint CHECK no existe en MySQL. Si indicación no es funcional.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/11/2013, 15:52
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 11 años
Puntos: 0
Respuesta: Error 1215: Cannot add foreign key constraint

Hola gnzsoloyo,

Ya he dado con la solución al final me ha salido con este llamada:

Código MySQL:
Ver original
  1. create table if not exists historic
  2. (codJug smallint(3) unsigned,
  3. dataini date,
  4. datafi date not null check(datafi>dataini),
  5. codClub tinyint(2) unsigned,
  6. numGols smallint(3) unsigned,
  7. codEsp tinyint(2) unsigned default 1,
  8. imports smallint(3) unsigned,
  9. primary key (codJug,dataini),
  10. foreign key (codJug) references jugador (codJug) on delete no action on update cascade,
  11. foreign key (codEsp) references especialitat(codEsp) on delete no action on update cascade)

He cambiado las restricciones de algunas columnas. El problema era que los unisigned que estaban en las primary keys no las habia puesto antes.

Muchas gracias por la ayuda.

Última edición por gnzsoloyo; 25/11/2013 a las 16:03

Etiquetas: add, constraint, key, null, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:11.