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

Error foreign keys

Estas en el tema de Error foreign keys en el foro de Mysql en Foros del Web. Saludos, me podría hechar alguien una mano, xq ya estoy desesperado. Tengo 3 tablas en mi BD y quiero crear 2 foreigns keys para relaccionarlas(todo ...
  #1 (permalink)  
Antiguo 23/08/2011, 04:51
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 10 años, 10 meses
Puntos: 2
Error foreign keys

Saludos, me podría hechar alguien una mano, xq ya estoy desesperado. Tengo 3 tablas en mi BD y quiero crear 2 foreigns keys para relaccionarlas(todo ON CASCADE)

y siempre me da error. Os spongo el error que me da con MySQLworkbech

Código:
ERROR 1005: Can't create table 'shooterbd.#sql-430_af' (errno: 150)

SQL Statement:

ALTER TABLE `shooterbd`.`juego` 

  ADD CONSTRAINT `foreignusuario`

  FOREIGN KEY (`user` )

  REFERENCES `shooterbd`.`usuario` (`nombre` )

  ON DELETE CASCADE

  ON UPDATE CASCADE

, ADD INDEX `foreignusuario` (`user` ASC)



ERROR: Error when running failback script. Details follow.



ERROR 1046: No database selected

SQL Statement:

CREATE TABLE `juego` (

  `idJuego` int(11) NOT NULL AUTO_INCREMENT,

  `user` varchar(20) NOT NULL,

  `foto_disparo` varchar(45) DEFAULT NULL,

  `puntuacion` int(10) unsigned NOT NULL DEFAULT '0',

  `t_conexion` time NOT NULL DEFAULT '00:00:00',

  `t_penalizacion` time NOT NULL DEFAULT '00:00:00',

  `latitud` bigint(20) unsigned NOT NULL DEFAULT '0',

  `longitud` bigint(20) unsigned NOT NULL DEFAULT '0',

  `estado` tinyint(1) unsigned NOT NULL DEFAULT '0',

  `muerto` tinyint(1) unsigned NOT NULL DEFAULT '0',

  `destino_lat` bigint(20) unsigned NOT NULL DEFAULT '0',

  `destino_lon` bigint(20) unsigned NOT NULL DEFAULT '0',

  PRIMARY KEY (`idJuego`,`user`)

) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
He probado:
- que la BD, tablas y campos tengan la misma codificacion UTF-8
- que los campos a relacionar sean claves primarias
-que los campos sean exactamente del mismo tipo VARCHAR(20)
-que todas las tablas sean tipo InnoDB
-que acepten los mismos values Not Null

alguien puede hecharme una mano???

por si es necesario tengo MySQL 5.5, en Windows 7 ultimate

Muchas gracias
  #2 (permalink)  
Antiguo 23/08/2011, 05:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años
Puntos: 2658
Respuesta: Error foreign keys

El problema ya te lo dice el mensaje de error:
Cita:
ERROR 1046: No database selected
O sea, estás tratando de ejecutar una sentencia sin haber seleccionado la base de datos de trabajo...
Para que eso fuese posible, la sentencia debería incluir también el nombre de la base junto con el de la tabla. De lo contrario no funciona.

Selecciona la base y entonces ejecuta la sentencia.
__________________
¿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 23/08/2011, 08:14
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: Error foreign keys

Estoy utilizando MySQL Worbench, donde te da la opción de seleccionar la BD??? o tienes que hacerlo desde MySQL Command line Client?????

Ya que este puede ser el fallo y tiene pinta de ser una tontería, ¿que sentencia o que tengo que hacer para solucionarlo?
  #4 (permalink)  
Antiguo 23/08/2011, 08:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años
Puntos: 2658
Respuesta: Error foreign keys

Cuando abres la conexión le puedes indicar la base de trabajo. De lo contrario simplemente haz doble click en la base a usar, en el panel lateral que suele estar a la izquierda.
__________________
¿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 23/08/2011, 08:57
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: Error foreign keys

He seleccionado mi shooterbd como schema default, no se si será esto. Pero al intentarlo de nuevo me da nuevos erroresç


Código:
ERROR 1005: Can't create table 'shooterbd.#sql-430_b9' (errno: 150)

SQL Statement:

ALTER TABLE `shooterbd`.`juego` 

  ADD CONSTRAINT `fk_usuarios`

  FOREIGN KEY (`user` )

  REFERENCES `shooterbd`.`usuario` (`nombre` )

  ON DELETE CASCADE

  ON UPDATE CASCADE

, ADD INDEX `fk_usuarios` (`user` ASC)



ERROR: Error when running failback script. Details follow.



ERROR 1050: Table 'juego' already exists

SQL Statement:

CREATE TABLE `juego` (

  `idJuego` int(11) NOT NULL AUTO_INCREMENT,

  `user` varchar(20) NOT NULL,

  `foto_disparo` varchar(45) DEFAULT NULL,

  `puntuacion` int(10) unsigned NOT NULL DEFAULT '0',

  `t_conexion` time NOT NULL DEFAULT '00:00:00',

  `t_penalizacion` time NOT NULL DEFAULT '00:00:00',

  `latitud` bigint(20) unsigned NOT NULL DEFAULT '0',

  `longitud` bigint(20) unsigned NOT NULL DEFAULT '0',

  `estado` tinyint(1) unsigned NOT NULL DEFAULT '0',

  `muerto` tinyint(1) unsigned NOT NULL DEFAULT '0',

  `destino_lat` bigint(20) unsigned NOT NULL DEFAULT '0',

  `destino_lon` bigint(20) unsigned NOT NULL DEFAULT '0',

  PRIMARY KEY (`idJuego`,`user`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

Supuestamente no me deja porque ya existe una tabla con ese nombre. O no lo hago bien o me está diciendo que vuelva a rehacer la BD. ¿Alguien puede ayudar?
  #6 (permalink)  
Antiguo 23/08/2011, 09: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: 14 años
Puntos: 2658
Respuesta: Error foreign keys

Bueno, en realidad el tema es simple: Si ya creaste la tabla, no puedes volver a crearla.
Que un script te falle a partir de u punto no implica que todas las operacioens anteriores no se hayan ejecutado.
Si lo que estás intentando hacer es crear una base desde un script, debes hacer lo que se suele hacer en todos los casos: primero verifica que las tablas no existan y si existen, se eliminen antes de crearlas.
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS tabla(...
Normalmente los backups que se hacen contienen sentencias de este tipo en forma consecutiva, pero es posible hacer un backup sin el DROP condicional, que debe ser tu caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, keys, select, sql, tabla, foreignkey
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 23:08.