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

Error de MYSQL

Estas en el tema de Error de MYSQL en el foro de Bases de Datos General en Foros del Web. Holas haciendo una relacion me da este error alguien me podria decir a q se debe, o q estoy haciendo mal saludos...
  #1 (permalink)  
Antiguo 08/03/2010, 20:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Error de MYSQL

Holas haciendo una relacion me da este error



alguien me podria decir a q se debe, o q estoy haciendo mal


saludos
  #2 (permalink)  
Antiguo 08/03/2010, 21:29
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Error de MYSQL

Fijate en que los campos relacionados sean del mismo tipo y tamaño
Y asegurate que cada tabla tiene primero su campo de clave primaria creado
  #3 (permalink)  
Antiguo 08/03/2010, 21:41
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error de MYSQL

me fijé en todo y todo sigue igual, es q lo q quiero es esto:

tengo una tabla intermediaria llamada relacion esta tabla tiene dos llaves foraneas llamadas idfororel y idtemrel estos se ligan con diferentes tablas.

idfororel es la que me da problema, ya q la ligo con un campo idforo. idtemrel se liga con idtema.

la engine es InnoDB

Y los charset me fije y son iguales.

No se porqué sera ese problema y gracias por tu respuesta VUN

saludos
  #4 (permalink)  
Antiguo 08/03/2010, 21:42
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 de MYSQL

No te olvides que una FK se establece entre un campo de una tabla y la PK de otra tabla (o en su defecto, un campo UNIQUE), y que debe ser exactamente del mismo tipo de dato.
__________________
¿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 08/03/2010, 21:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error de MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No te olvides que una FK se establece entre un campo de una tabla y la PK de otra tabla (o en su defecto, un campo UNIQUE), y que debe ser exactamente del mismo tipo de dato.
Gracias por tu respuesta, lo raro es q idtemrel e idtema los dos son PK, pero para idfororel e idforo no me lo permite.

Lo q hice fue q hice la relacion de B]idforo[/B] a idfororel y si me la aceptó u.u, si alguien desea ayudarme con este problema aqui mi correo: xxxxxxxxxxxxxxx

Saludos

Última edición por repo316; 08/03/2010 a las 22:54
  #6 (permalink)  
Antiguo 08/03/2010, 21: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 de MYSQL

Por empezar, postea la estructura de las tablas involucradas. De esa forma podríamos estar seguros de por qué no puedes, y qué es lo que realmente intentas hacer.
Y por estructura, me refiero al CREATE TABLE(...., y no a que las describas (digo esto porque muchas veces no lo hacen y te mandan descripciones que no dicen nada sobre los problemas).

Además de eso, hay que comprobar otra cosa: ¿Esas tablas ya tienen datos?
__________________
¿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 08/03/2010, 22:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error de MYSQL

Cita:
DROP TABLE IF EXISTS `proyectoforo`.`relacion`;
CREATE TABLE `proyectoforo`.`relacion` (
`idtemrel` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idtfororel` char(2) NOT NULL,
PRIMARY KEY (`idtemrel`,`idtfororel`),
KEY `FK_relacion_1` (`idtfororel`),
CONSTRAINT `FK_relacion_1` FOREIGN KEY (`idtfororel`) REFERENCES `subforo` (`idforo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Cita:
DROP TABLE IF EXISTS `proyectoforo`.`subforo`;
CREATE TABLE `proyectoforo`.`subforo` (
`idforo` char(2) NOT NULL,
`nombforo` varchar(100) NOT NULL,
`descriforo` tinytext NOT NULL,
PRIMARY KEY (`idforo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Eso lo saqué del MYSQL QUERRY BROWSER

espero sea eso.

Y las tablas no tienen absolutamente nada :S

se me olvidaba, lo quiero hacer es un foro, lo cual cuando acceso al foro de Comp Emp le doy crear tema ingreso el id del foro al de tema para q a la hora de hacer la consulta se impriman todos los temas de ese foro
  #8 (permalink)  
Antiguo 08/03/2010, 22:31
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 de MYSQL

El error que mencionas es simple:



Estás tratando de crear en la tabla subforo una FK apuntando a la PK de relacion, pero esa PK es de dos campos... y una FK se debe referenciar a toda la clave y no a una parte de ella.

Por lo demás...:
Código MySQL:
Ver original
  1. CREATE TABLE `proyectoforo`.`relacion` (
  2. `idtfororel` char(2) NOT NULL,
  3. PRIMARY KEY (`idtemrel`,`idtfororel`),
  4. KEY `FK_relacion_1` (`idtfororel`),
  5. CONSTRAINT `FK_relacion_1` FOREIGN KEY (`idtfororel`) REFERENCES `subforo` (`idforo`)
¿Por qué estás definiendo una PK de dos campos, si ya idtemrel es un campo que puede identificar el registro unívocamente?
Además, al usar un campo auto_increment como parte de una PK, corres el riesgo de que en el campo idtfororel puedan ingresarse datos repetidos, ya que una parte de la PK siempre variará, con lo que la integridad de la PK se mantendría.

La idea es que tu modelo de tabla permite esto:
Código MySQL:
Ver original
  1. `idtemrel` `idtfororel`
  2. 1               2
  3. 2               2
  4. 3               2
  5. 4               3
  6. 5               3

Finalmente: Estás tratando de poner una FK circular, con lo que jamás podrás ingresar datos en esas tablas...

Tengo la impresión de que el modelo de datos tiene defectos de diseño...

¿Podrías darnos más datos acerca del esquema de tablas y sus relaciones?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 08/03/2010, 22:51
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error de MYSQL

es q segun me dijo un profesor necesitaba hacer una tabla de relación ya que cuando hacia un nuevo tema este lo q me daba error es que la llave.

se supone que en subforo pueden haber varios temas, y lo que yo hacia antes era que liga la PK de Idforo con un campo en la tabla tema que se llama temforo ambos del mismo tipo y tamaño, y pues como no soy muy bueno para hacer bases de datos u.u. Aun asi gracias por tu respuesta man, mañana ire a consultar a un profesor a ver que me dice.

Pondre la solucion aqui si en dado caso hay solucion :S bueno man

gracias por todo que mañana tengo exposición y examen.

bye
  #10 (permalink)  
Antiguo 08/03/2010, 22:59
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 de MYSQL

Te doy un tip:
Supongamos una relación N:N, o sea de muchos a muchos. En tu caso, si cada foro puede tener muchos temas, y diferentes temas pueden aparecer en muchos foros, se requiere una tabla adicional, digamos temas_foros(PK_Temas, PK_foros).
Pero si en un mismo foro hay muchos temas, pero cada tema pertenece a un sólo foro, es la PK del foro lo que va en la tabla temas, pero no a la inversa...
Siempre la cardinalidad N es la que define dónde va la FK

Para tu caso sería:

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS `proyectoforo`.`tema`;
  2. CREATE TABLE `proyectoforo`.`tema` (
  3. ..., -- <-resto de los campos
  4. `idforo` char(2) NOT NULL,
  5. PRIMARY KEY (`idtema`),
  6. KEY `FK_tema_foro` (`idforo`),
  7. CONSTRAINT `FK_tema_foro` FOREIGN KEY (`idforo`) REFERENCES `subforo` (`idforo`)
  8.  
  9. DROP TABLE IF EXISTS `proyectoforo`.`subforo`;
  10. CREATE TABLE `proyectoforo`.`subforo` (
  11. `idforo` char(2) NOT NULL,
  12. `nombforo` varchar(100) NOT NULL,
  13. `descriforo` tinytext NOT NULL,
  14. PRIMARY KEY (`idforo`)
Mas o menos así...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 10/03/2010, 20:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error de MYSQL

te agradesco toda la ayuda amigo gnzsoloyo ya vi el error y no era la BD sino una variable la cual q al darle el insert en el php pues llegaba vacia, entonces me salia el error del foreing key, asi q al final no era de BD de datos el problema, respondo hasta ahorita es por que estube madrugando investigando el codigo paso a paso, te pido disculpas y agradecimiento por la ayuda.

saludos
  #12 (permalink)  
Antiguo 10/03/2010, 20:50
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Error de MYSQL

El 90% de los errores con bases de datos vienen por esos despistes, lo sabemos todos xD. Lo mejor: Saca con echo o printf la sentencia , copiala y pegala en la consola de phpmyadmin y ahi te va a decir en que punto de la sentencia falla, te pones a solucionarla hasta que des con la tecla

Etiquetas: mysql
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 13:11.