Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/09/2013, 11:05
Avatar de gnzsoloyo
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: no puedo añadir foreign key

Hola, antes que nada, estás abriendo dos hilos para básicamente un mismo tema, referido a FK.
Te recuerdo que eso no se permite, y está explicitamente prohibido en las Politicas de Uso de FDW.
Este hilo está relacionado con el otro, donde planteabas problemas con el ALTER TABLE, y serán fusionados en un rato.

Además de este detalle, y yendo al problema que te aqueja, hay un par de cosas que necesitas corregir, una de las cuales puede estar causando tu problema.
Este "255" que pones en las columnas numéricas es total y absolutamente inútil. Para mas información, no representa la cantidad de dígitos ni nada que se le parezca, pero puede causarte problemas luego.
La explicación de para qué el sistema pone ese numero está en el manual de referencia y se ha explicado en este foro varias veces. En realidad, no sirve para nada útil, y no restringe ni expande la longitud del numero, porque los valores numéricos no se almacenan como cifras, sino como números binarios. Y eso es otra cosa. Por eso la longitud máxima de un INT es de 4 bytes, y un bigint de 8, y MySQL no usa mas que eso.
Pero por otro lado, como estás definiendo diferente el campo FK de una tabla, respecto al de la PK referida (10 en uno y 255 en el otro), eso es una causa probable del fallo.
También hay que comprobar que las tablas estén vacías, y si no están vacías, asegurarse que los datos que existan cumplan las restricciones indicadas por la nueva FK.
Si al menos un registro no la cumple, no te dejará crear la FK.
Código MySQL:
Ver original
  1. CREATE TABLE `users` (
  2.  `id_user` int NOT NULL AUTO_INCREMENT,
  3.  `id_twitter` int NOT NULL COMMENT 'id de la cuenta twitter',
  4.  `nombre` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL COMMENT 'nombre en twitter',
  5.  `imagen` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL COMMENT 'imagen en twitter',
  6.  `oauth_token` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  7.  `oauth_token_secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  8.  PRIMARY KEY (`id_user`)
  9.  
  10. CREATE TABLE `answers` (
  11.  `id_answer` int NOT NULL AUTO_INCREMENT,
  12.  `answer` varchar(255) COLLATE utf8_spanish2_ci NOT NULL,
  13.  `id_questions` int(255) NOT NULL,
  14.  `id_users` int(255) NOT NULL,
  15.  `datetime` datetime NOT NULL,
  16.  `viewed_users` int UNSIGNED DEFAULT NULL,
  17.  PRIMARY KEY (`id_answer`),
  18.  KEY `id_questions` (`id_questions`),
  19.  KEY `id_users` (`id_users`),
  20.  CONSTRAINT `answers_ibfk_2` FOREIGN KEY (`id_questions`) REFERENCES `questions` (`id_question`),
  21.  CONSTRAINT `answers_ibfk_3` FOREIGN KEY (`id_users`) REFERENCES `users` (`id_user`)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci COMMENT='administra las respuestas de cada usuario';
  23.  
  24. ALTER TABLE answers
  25. ADD FOREIGN KEY (viewed_users) REFERENCES users (id_user);

Otro detalle que debes tener en cuenta es que 255 no es la longitud máxima actualmente en un VARCHAR. Una columna de ese tipo puede tener 65536 caracteres de longitud.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)