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

Error Code: 1701.

Estas en el tema de Error Code: 1701. en el foro de Mysql en Foros del Web. Hola a todos, a ver si alguien me puede ayudar porque creo que tengo errores en la definicion de mi esquema. Intento hacer un TRUNCATE ...
  #1 (permalink)  
Antiguo 11/08/2015, 05:59
 
Fecha de Ingreso: agosto-2015
Ubicación: Bilbao
Mensajes: 5
Antigüedad: 8 años, 8 meses
Puntos: 0
Error Code: 1701.

Hola a todos,

a ver si alguien me puede ayudar porque creo que tengo errores en la definicion de mi esquema.

Intento hacer un TRUNCATE de la tabla JOB, pero me da este error:

Código MySQL:
Ver original
  1. Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint
  2. (`elea`.`favorites`, CONSTRAINT `FAVORITES_JOB_FK` FOREIGN KEY (`JOB_ID`) REFERENCES
  3. `elea`.`job` (`ID`))
a pesar de que la tabla FAVORITES está vacía. También me da error al hacer inserts en algunas tablas, por ejemplo:
Código MySQL:
Ver original
  1. INSERT INTO job (ID, USER_ID, TITLE, DESCRIPTION, COUNTRY_ID, TOWN_ID, PROVINCE_ID, IS_OFFER,
  2. IS_ACTIVE, PAYMENT_MODE, AMOUNT, DATE_CREATED, DATE_MODIFIED, DATE_DELETED)
  3. VALUES (2, 4, 'Electricista', 'Una .....', 0, 0, 8, 1, 1, 'H', 80, '2015-07-28 13:27:42', '2015-07-28 13:28:57',
  4. NULL)  
  5. Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`elea`.`job`,
  6. CONSTRAINT `JOB_TOWN_FK` FOREIGN KEY (`TOWN_ID`) REFERENCES `town` (`ID`) ON DELETE
Las tablas COUNTRY, TOWN, PROVINCE y USER están cargadas.

El esquema es:

Código MySQL:
Ver original
  1. -- MySQL Workbench Forward Engineering
  2.  
  3. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  4. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  5. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  6.  
  7. -- -----------------------------------------------------
  8. -- Schema elea
  9. -- -----------------------------------------------------
  10. DROP SCHEMA IF EXISTS `elea` ;
  11.  
  12. -- -----------------------------------------------------
  13. -- Schema elea
  14. -- -----------------------------------------------------
  15. CREATE SCHEMA IF NOT EXISTS `elea` DEFAULT CHARACTER SET latin1 COLLATE latin1_spanish_ci ;
  16. USE `elea` ;
  17.  
  18. -- -----------------------------------------------------
  19. -- Table `elea`.`COUNTRY`
  20. -- -----------------------------------------------------
  21. DROP TABLE IF EXISTS `elea`.`COUNTRY` ;
  22.  
  23. CREATE TABLE IF NOT EXISTS `elea`.`COUNTRY` (
  24. `ID` INT NOT NULL,
  25. `NAME` VARCHAR(45) NOT NULL,
  26. `AVAILABLE` TINYINT(1) NOT NULL DEFAULT 0,
  27. PRIMARY KEY (`ID`))
  28.  
  29.  
  30. -- -----------------------------------------------------
  31. -- Table `elea`.`PROVINCE`
  32. -- -----------------------------------------------------
  33. DROP TABLE IF EXISTS `elea`.`PROVINCE` ;
  34.  
  35. CREATE TABLE IF NOT EXISTS `elea`.`PROVINCE` (
  36. `NAME` VARCHAR(45) NOT NULL,
  37. `COUNTRY_ID` INT NOT NULL,
  38. PRIMARY KEY (`ID`),
  39. INDEX `COUNTRY_FK_idx` (`COUNTRY_ID` ASC),
  40. CONSTRAINT `COUNTRY_FK`
  41. FOREIGN KEY (`COUNTRY_ID`)
  42. REFERENCES `elea`.`COUNTRY` (`ID`)
  43.  
  44.  
  45. -- -----------------------------------------------------
  46. -- Table `elea`.`TOWN`
  47. -- -----------------------------------------------------
  48. DROP TABLE IF EXISTS `elea`.`TOWN` ;
  49.  
  50. CREATE TABLE IF NOT EXISTS `elea`.`TOWN` (
  51. `NAME` VARCHAR(100) NOT NULL,
  52. `PROVINCE_ID` INT NOT NULL,
  53. `DC` INT NOT NULL,
  54. `COD_MUNICIPIO` INT NOT NULL,
  55. PRIMARY KEY (`ID`),
  56. INDEX `PROVINCE_FK_idx` (`PROVINCE_ID` ASC),
  57. CONSTRAINT `PROVINCE_FK`
  58. FOREIGN KEY (`PROVINCE_ID`)
  59. REFERENCES `elea`.`PROVINCE` (`ID`)
  60.  
  61.  
  62. -- -----------------------------------------------------
  63. -- Table `elea`.`USER`
  64. -- -----------------------------------------------------
  65. DROP TABLE IF EXISTS `elea`.`USER` ;
  66.  
  67. CREATE TABLE IF NOT EXISTS `elea`.`USER` (
  68. `ID` INT NOT NULL,
  69. `USER_KEY` VARCHAR(100) NULL,
  70. `EMAIL` VARCHAR(150) NULL,
  71. `MAIL_NOTIF_ACTIVE` TINYINT(1) NULL DEFAULT 1,
  72. `DEVICE_NOTIF_ACTIVE` TINYINT(1) NULL DEFAULT 1,
  73. `DEVICE_ID` VARCHAR(100) NULL,
  74. PRIMARY KEY (`ID`))
  75.  
  76.  
  77. -- -----------------------------------------------------
  78. -- Table `elea`.`JOB`
  79. -- -----------------------------------------------------
  80. DROP TABLE IF EXISTS `elea`.`JOB` ;
  81.  
  82. CREATE TABLE IF NOT EXISTS `elea`.`JOB` (
  83. `ID` INT NOT NULL,
  84. `USER_ID` INT NOT NULL,
  85. `TITLE` VARCHAR(100) NULL,
  86. `DESCRIPTION` VARCHAR(4000) NULL,
  87. `COUNTRY_ID` INT NULL,
  88. `TOWN_ID` INT NULL,
  89. `PROVINCE_ID` INT NULL,
  90. `IS_OFFER` TINYINT(1) NOT NULL,
  91. `IS_ACTIVE` TINYINT(1) NULL DEFAULT 1,
  92. `PAYMENT_MODE` VARCHAR(1) NULL,
  93. `AMOUNT` INT NULL,
  94. `DATE_CREATED` DATE NULL,
  95. `DATE_MODIFIED` DATE NULL,
  96. `DATE_DELETED` DATE NULL,
  97. PRIMARY KEY (`ID`),
  98. INDEX `COUNTRY_FK_idx` (`COUNTRY_ID` ASC),
  99. INDEX `PROVINCE_FK_idx` (`PROVINCE_ID` ASC),
  100. INDEX `TOWN_FK_idx` (`TOWN_ID` ASC),
  101. INDEX `USER_FK_idx` (`USER_ID` ASC),
  102. CONSTRAINT `JOB_COUNTRY_FK`
  103. FOREIGN KEY (`COUNTRY_ID`)
  104. REFERENCES `elea`.`COUNTRY` (`ID`)
  105. CONSTRAINT `JOB_PROVINCE_FK`
  106. FOREIGN KEY (`PROVINCE_ID`)
  107. REFERENCES `elea`.`PROVINCE` (`ID`)
  108. CONSTRAINT `JOB_TOWN_FK`
  109. FOREIGN KEY (`TOWN_ID`)
  110. REFERENCES `elea`.`TOWN` (`ID`)
  111. CONSTRAINT `JOB_USER_FK`
  112. FOREIGN KEY (`USER_ID`)
  113. REFERENCES `elea`.`USER` (`ID`)
  114.  
  115.  
  116. -- -----------------------------------------------------
  117. -- Table `elea`.`FAVORITES`
  118. -- -----------------------------------------------------
  119. DROP TABLE IF EXISTS `elea`.`FAVORITES` ;
  120.  
  121. CREATE TABLE IF NOT EXISTS `elea`.`FAVORITES` (
  122. `ID` INT NOT NULL,
  123. `USER_ID` INT NULL,
  124. `JOB_ID` INT NULL,
  125. PRIMARY KEY (`ID`),
  126. INDEX `USER_FK_idx` (`USER_ID` ASC),
  127. INDEX `JOB_FK_idx` (`JOB_ID` ASC),
  128. CONSTRAINT `FAVORITES_USER_FK`
  129. FOREIGN KEY (`USER_ID`)
  130. REFERENCES `elea`.`USER` (`ID`)
  131. CONSTRAINT `FAVORITES_JOB_FK`
  132. FOREIGN KEY (`JOB_ID`)
  133. REFERENCES `elea`.`JOB` (`ID`)
  134.  
  135.  
  136. -- -----------------------------------------------------
  137. -- Table `elea`.`MESSAGES`
  138. -- -----------------------------------------------------
  139. DROP TABLE IF EXISTS `elea`.`MESSAGES` ;
  140.  
  141. CREATE TABLE IF NOT EXISTS `elea`.`MESSAGES` (
  142. `ID` INT NOT NULL,
  143. `SENDER_ID` INT NOT NULL,
  144. `RECEIVER_ID` INT NOT NULL,
  145. `MESSAGE_TEXT` VARCHAR(4000) NOT NULL,
  146. `IS_READ` TINYINT(1) NULL DEFAULT 0,
  147. `DATE_CREATED` DATE NULL,
  148. `DATE_MODIFIED` DATE NULL,
  149. `DATE_DELETED` DATE NULL,
  150. `JOB_ID` INT NULL,
  151. `SUBJECT` VARCHAR(100) NULL,
  152. PRIMARY KEY (`ID`),
  153. INDEX `MESSAGES_SENDER_FK_idx` (`SENDER_ID` ASC),
  154. INDEX `MESSAGES_RECEIVER_FK_idx` (`RECEIVER_ID` ASC),
  155. INDEX `MESSAGES_JOB_FK_idx` (`JOB_ID` ASC),
  156. CONSTRAINT `MESSAGES_SENDER_FK`
  157. FOREIGN KEY (`SENDER_ID`)
  158. REFERENCES `elea`.`USER` (`ID`)
  159. CONSTRAINT `MESSAGES_RECEIVER_FK`
  160. FOREIGN KEY (`RECEIVER_ID`)
  161. REFERENCES `elea`.`USER` (`ID`)
  162. CONSTRAINT `MESSAGES_JOB_FK`
  163. FOREIGN KEY (`JOB_ID`)
  164. REFERENCES `elea`.`JOB` (`ID`)
  165.  
  166.  
  167. -- -----------------------------------------------------
  168. -- Table `elea`.`PROPERTIES`
  169. -- -----------------------------------------------------
  170. DROP TABLE IF EXISTS `elea`.`PROPERTIES` ;
  171.  
  172. CREATE TABLE IF NOT EXISTS `elea`.`PROPERTIES` (
  173. `ID` INT NOT NULL,
  174. `PROP_NAME` VARCHAR(45) NULL,
  175. `PROP_VALUE` VARCHAR(200) NULL,
  176. PRIMARY KEY (`ID`))
  177.  
  178.  
  179. SET SQL_MODE=@OLD_SQL_MODE;
  180. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  181. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
[/QUOTE]



Gracias de antemano

Última edición por gnzsoloyo; 11/08/2015 a las 06:10 Razón: Código PESIMAMENTE etiquetado.
  #2 (permalink)  
Antiguo 11/08/2015, 06:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error Code: 1701.

Cita:
Intento hacer un TRUNCATE de la tabla JOB, pero me da este error:

Código MySQL:
Código MySQL:
Ver original
  1. Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint
  2. (`elea`.`favorites`, CONSTRAINT `FAVORITES_JOB_FK` FOREIGN KEY (`JOB_ID`) REFERENCES `elea`.`job` (`ID`))
Eso no es un error de MySQL, es un error tuyo.
Estás intentando borrar una tabla con valores que son FK en otra tabla, y están siendo usados en esa tabla.

Lo que hace MySQL es proteger la integridad referencial de las metidas de pata de los que usan la base, como en este caso. Como uno o más valores de esa tabla son FK en uso en otra, no te permitirá truncar la tabla a menos que vacíes la otra tabla también.
¿Se entiende?

Además, desconoces completamente cómo hace MySQL para truncar las tablas, pero si lees el manual de referencia verás que TRUNCATE es una sentencia proclive a errores en tablas InnoDB cuando hay FK definidas en alguna relación.

Debes eliminar los registros que hacen referencia a esa tabla si quieres truncarla.
__________________
¿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 11/08/2015, 09:34
 
Fecha de Ingreso: agosto-2015
Ubicación: Bilbao
Mensajes: 5
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Error Code: 1701.

Obviamente es un error mio, así lo he puesto.

Si lees más adelante, puedes ver que también pongo que la tabla FAVORITES está vacía.

El error del INSERT ya está corregido...

Última edición por volldamm69; 11/08/2015 a las 09:48
  #4 (permalink)  
Antiguo 11/08/2015, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error Code: 1701.

Pues no has entendido a que me refiero respecto del TRUNCATE, ¿no es así?

Si lees el manual de referencia lo entenderás un poco mejor, pero un TRUNCATE no "trunca" la tabla realmente, sino que:

1) Crea una tabla nueva con la misma estructura de la tabla a truncar, con diferente nombre.
2) Elimina la tabla a truncar.
3) Cambia el nombre de la tabla nueva por el de la vieja.

Cita:
TRUNCATE TABLE fails for an InnoDB table or NDB table if there are any FOREIGN KEY constraints from other tables that reference the table. Foreign key constraints between columns of the same table are permitted.
Ese proceso hace que si existen dependencias funcionales (constraint FK) el truncado pueda fallar, porque MySQL no admite que se eliminen las tablas vacías en esas condiciones.

Como dije, tienes que leer el manual de referencia...

https://dev.mysql.com/doc/refman/5.6...ate-table.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/08/2015, 11:51
 
Fecha de Ingreso: agosto-2015
Ubicación: Bilbao
Mensajes: 5
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Error Code: 1701.

Entendido! Muchas gracias.

La verdad que es la primera vez que creo un esquema desde 0 y creo que me he liado. Estoy utilizando JPA para mapear las tablas a Java y no tiene buena pinta...

Le puedes echar un vistazo al esquema por favor? Creo que me he liado con las foreign keys....

Gracias!
  #6 (permalink)  
Antiguo 11/08/2015, 11:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error Code: 1701.

Esta noche.
En el trabajo no tengo el servidor de MySQL instalado (usamos Oracle), y tampoco el MySQL Workbench para analizarlo bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/08/2015, 12:00
 
Fecha de Ingreso: agosto-2015
Ubicación: Bilbao
Mensajes: 5
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Error Code: 1701.

Muchísimas gracias! Ando bastante perdido :(

Etiquetas: code, sql, tabla, update
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 20:03.