Ver Mensaje Individual
  #30 (permalink)  
Antiguo 06/01/2015, 04:52
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: 17 años, 3 meses
Puntos: 2658
Respuesta: informacion sobre como relaciono una tabla con id usuarios

Altamente probable que tengas datos inconsistentes...
Si las tablas tienen datos, lo más probable es que una o mas de una a las que quieres poner la FK contienen en ese campo datos que no están en la tabla a la que harán referencia.
La solución más fácil es borrar todos los datos de todas las tablas antes de crear la FK.
Si no puedes, sólo resta eliminar los registros que están mal.

Nota: Otra posibilidad es que haya diferenta de tipo de dato en alguna tabla. Por ejemplo, no puedes relacionar INT con SMALLINT u otra cosa, como tampoco puedes relacionar un INT UNSIGNED con un INT con signo, ni tampoco VARCHAR(100) con VARCHAR(101), por dar una idea.
Los tipos de dato entre PK y FK deben ser exactamente los mismos.

En tu caso, a pesar de que en ambas tablas "usuario_id" es un INT, le estás poniendo esa basura de "(4)", que es totalmente innecesaria, pero puede traer problemas.
Los tipo de dato entero deben dejarse con su valor pro default, sin poner ese numerito que no restringe nada, sino que se usa para otra cosa.
Declaralo como UNSIGNED directamente y sin agregados:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `registro usuarios` (
  2.   `usuario_nombre` varchar(15) NOT NULL,
  3.   `usuario_clave` varchar(50) NOT NULL,
  4.   `usuario_email` varchar(50) NOT NULL DEFAULT '',
  5.   `usuario_freg` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  6.   `tipo` enum('2','1') NOT NULL DEFAULT '2',
  7.   `facebook` varchar(250) NOT NULL,
  8.   `twitter` varchar(250) NOT NULL,
  9.   `avatar` varchar(500) NOT NULL,
  10.   PRIMARY KEY (`usuario_id`)
  11.  
  12.  
  13. CREATE TABLE IF NOT EXISTS `datos imagenes` (
  14. `usuario_id` INT UNSIGNED NOT NULL,
  15. `ruta` varchar(100) NOT NULL,
  16. `descripcion` text,
  17. PRIMARY KEY (`usuario_id`)
  18.  
  19. --
  20. -- esta es la relacion de las tablas
  21. --
  22. ALTER TABLE `datos`
  23.   ADD CONSTRAINT `datos_ibfk_1` FOREIGN KEY (`Usuario_ID`) REFERENCES `usuarios` (`usuario_ID`) ON DELETE CASCADE ON UPDATE CASCADE;

Otro detalle, producto más de lógica de sistemas que de SQL: Un nombre_usuario no puede tener un valor por default vacío, así como tampoco debe repetirse. Ese campo debe ser UNIQUE. Tampoco puede tener valor por defecto una clave. SI lo hicieras estarías permitiendo la entrada a cualquiera, tanto en uno como en otro caso.
¿Se entiende?
Código MySQL:
Ver original
  1. CREATE UNIQUE INDEX username_unq ON registro_usuarios(usuario_nombre);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/01/2015 a las 06:05