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

[SOLUCIONADO] Error 1215

Estas en el tema de Error 1215 en el foro de Bases de Datos General en Foros del Web. cannot add a foreign key constraint Este es el mensaje que me sale cuando intento agregar mediante consola y el comando source mi base de ...
  #1 (permalink)  
Antiguo 16/12/2015, 15:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 208
Antigüedad: 16 años, 5 meses
Puntos: 2
Error 1215

cannot add a foreign key constraint

Este es el mensaje que me sale cuando intento agregar mediante consola y el comando source mi base de datos.

He estado traceando y poniendo comentarios para ver donde estaba el fallo y me he dado cuenta que esta en la tabla LZONA pero no consigo solucionarlo, a ver si me pudierais echar un cable con ello:

Código SQL:
Ver original
  1. /* INICIO */
  2. CREATE DATABASE inmo;
  3. USE inmo;
  4.  
  5. CREATE TABLE IF NOT EXISTS CLIENTES(
  6. DNI VARCHAR(9),
  7. NOMBRE VARCHAR(25),
  8. APELLIDOS VARCHAR(50),
  9. TELEFONO NUMERIC(9),
  10. EMAIL VARCHAR(50),
  11. DIRECCION NUMERIC(50),
  12. POBLACION NUMERIC(50),
  13. FECHA DATE,
  14. PRIMARY KEY (DNI)
  15. );
  16.  
  17. CREATE TABLE IF NOT EXISTS ZONA(
  18. NOMBRE VARCHAR(25) PRIMARY KEY
  19. );
  20.  
  21. CREATE TABLE IF NOT EXISTS COLINDANCIA(
  22. NOMBRE VARCHAR(25),
  23. COLINDANCIA VARCHAR(25),
  24. PRIMARY KEY(COLINDANCIA, NOMBRE),
  25. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE)
  26. );
  27.  
  28. CREATE TABLE IF NOT EXISTS VIVIENDA(
  29. CALLE VARCHAR(50),
  30. NUMERO NUMERIC(5),
  31. PLANTA NUMERIC(5),
  32. LETRA VARCHAR(5),
  33. PRECIO NUMERIC(10),
  34. NEGOCIABLE NUMERIC(10),
  35. ASCENSOR BOOLEAN,
  36. TERRAZA NUMERIC(5),
  37. PISCINA BOOLEAN,
  38. AMUEBLADO BOOLEAN,
  39. MASCOTAS BOOLEAN,
  40. GARAJE BOOLEAN,
  41. CALEFACCION BOOLEAN,
  42. TRASTERO BOOLEAN,
  43. COCINA_EQUIPADA BOOLEAN,
  44. LAVADERO BOOLEAN,
  45. JARDIN BOOLEAN,
  46. EXCLUSIVIDAD BOOLEAN,
  47. FECHA DATE,
  48. PRIMARY KEY(CALLE, NUMERO, PLANTA, LETRA)
  49. );
  50.  
  51. CREATE TABLE IF NOT EXISTS LZONA(
  52. CALLE VARCHAR(50),
  53. NUMERO NUMERIC(5),
  54. PLANTA NUMERIC(5),
  55. LETRA VARCHAR(5),
  56. NOMBRE VARCHAR(25),
  57. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE),
  58. FOREIGN KEY (CALLE) REFERENCES VIVIENDA(CALLE),
  59. FOREIGN KEY (NUMERO) REFERENCES VIVIENDA(NUMERO),
  60. FOREIGN KEY (PLANTA) REFERENCES VIVIENDA(PLANTA),
  61. FOREIGN KEY (LETRA) REFERENCES VIVIENDA(LETRA),
  62. PRIMARY KEY (CALLE, NUMERO, PLANTA, LETRA, NOMBRE)
  63. );

Última edición por gnzsoloyo; 16/12/2015 a las 18:29
  #2 (permalink)  
Antiguo 16/12/2015, 15:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error 1215

Aqui esta tu error:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS ZONA(
  2. NOMBRE VARCHAR(25) PRIMARY KEY
  3. );
  4.  
  5. CREATE TABLE IF NOT EXISTS COLINDANCIA(
  6. NOMBRE VARCHAR(25),
  7. COLINDANCIA VARCHAR(25),
  8. PRIMARY KEY(COLINDANCIA, NOMBRE),
  9. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE)
  10. );

Como tienes una llave primaria de 2 campos el campo colindancia tiene que tener una referencia foranea para que lo acepte.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/12/2015, 16:06
 
Fecha de Ingreso: noviembre-2007
Mensajes: 208
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Error 1215

Cita:
Iniciado por Libras Ver Mensaje
Aqui esta tu error:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS ZONA(
  2. NOMBRE VARCHAR(25) PRIMARY KEY
  3. );
  4.  
  5. CREATE TABLE IF NOT EXISTS COLINDANCIA(
  6. NOMBRE VARCHAR(25),
  7. COLINDANCIA VARCHAR(25),
  8. PRIMARY KEY(COLINDANCIA, NOMBRE),
  9. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE)
  10. );

Como tienes una llave primaria de 2 campos el campo colindancia tiene que tener una referencia foranea para que lo acepte.....
Pero si colindancia es un campo de la tabla colindancia propia, porque le voy a añadir foreign key si no viene de otra tabla? ademas el fallo no viene de ahi viene de la tabla LZONA ya lo he traceado
  #4 (permalink)  
Antiguo 16/12/2015, 16:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error 1215

sorry se me cuatrapeo, creo que el problema es que cuando usas una llave foranea de mas de 2 campos quedaria de esta manera:



Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS LZONA(
  2. CALLE VARCHAR(50),
  3. NUMERO NUMERIC(5),
  4. PLANTA NUMERIC(5),
  5. LETRA VARCHAR(5),
  6. NOMBRE VARCHAR(25),
  7. PRIMARY KEY (CALLE, NUMERO, PLANTA, LETRA, NOMBRE),
  8. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE),
  9. FOREIGN KEY (CALLE,numero,planta,letra) REFERENCES VIVIENDA(CALLE,numero,planta,letra)
  10. );

http://dev.mysql.com/doc/refman/5.7/...eign-keys.html

Y primero va PK y despues FK ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 16/12/2015, 16:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 208
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Error 1215

Cita:
Iniciado por Libras Ver Mensaje
sorry se me cuatrapeo, creo que el problema es que cuando usas una llave foranea de mas de 2 campos quedaria de esta manera:



Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS LZONA(
  2. CALLE VARCHAR(50),
  3. NUMERO NUMERIC(5),
  4. PLANTA NUMERIC(5),
  5. LETRA VARCHAR(5),
  6. NOMBRE VARCHAR(25),
  7. PRIMARY KEY (CALLE, NUMERO, PLANTA, LETRA, NOMBRE),
  8. FOREIGN KEY (NOMBRE) REFERENCES ZONA(NOMBRE),
  9. FOREIGN KEY (CALLE,numero,planta,letra) REFERENCES VIVIENDA(CALLE,numero,planta,letra)
  10. );

http://dev.mysql.com/doc/refman/5.7/...eign-keys.html

Y primero va PK y despues FK ;)
Ya se me soluciono, gracias el tema era ese que se tiene que hacer con un foreign key no 4 como estaba haciendo yo

Etiquetas: 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:15.