Tema: errno 150
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/02/2011, 15:42
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: errno 150

Hola azuel:

Si checas, en tu tabla usuarios el campo llave es cod_usu sin embargo en la tabla comentarios estás poniéndolo como cod_usuario. La sintaxis correcta para poner el FK a la tabla de usuarios sería así:

Código:
CONSTRAINT FK_coment_usu FOREIGN KEY (cod_usuario) 
REFERENCES usuarios (cod_usu)
Código MySQL:
Ver original
  1. mysql> #Creamos la tabla de usuarios
  2. mysql> create table usuarios (
  3.     -> cod_usu int (30) AUTO_INCREMENT,
  4.     -> usuarios varchar (60) NOT NULL,
  5.     -> passwords varchar (60) NOT NULL,
  6.     -> CONSTRAINT PK_usuarios PRIMARY KEY (cod_usu)
  7.     -> ) Engine=InnoDB default charset=utf8;
  8. Query OK, 0 rows affected (0.06 sec)
  9.  
  10. mysql> insert into usuarios (usuarios, passwords) values ('usuario uno', 'passwo
  11. rd uno');
  12. Query OK, 1 row affected (0.02 sec)
  13.  
  14. mysql> select * from usuarios;
  15. +---------+-------------+--------------+
  16. | cod_usu | usuarios    | passwords    |
  17. +---------+-------------+--------------+
  18. |       1 | usuario uno | password uno |
  19. +---------+-------------+--------------+
  20. 1 row in set (0.00 sec)
  21.  
  22. mysql> #Creamos la tabla de videos
  23. mysql> create table videos (
  24.     -> cod_video int (30) AUTO_INCREMENT,
  25.     -> otro_campo varchar (60) NOT NULL,
  26.     -> CONSTRAINT PK_video PRIMARY KEY (cod_video)
  27.     -> ) Engine=InnoDB default charset=utf8;
  28. Query OK, 0 rows affected (0.08 sec)
  29.  
  30. mysql> insert into videos (otro_campo) values ('otro campo');
  31. Query OK, 1 row affected (0.02 sec)
  32.  
  33. mysql> select * from videos;
  34. +-----------+------------+
  35. | cod_video | otro_campo |
  36. +-----------+------------+
  37. |         1 | otro campo |
  38. +-----------+------------+
  39. 1 row in set (0.00 sec)
  40.  
  41. mysql> #Creamos la tabla de comentarios
  42. mysql> CREATE TABLE comentarios(
  43.     -> cod_cmt INT (30) AUTO_INCREMENT,
  44.     -> cod_video INT(30) NOT NULL,
  45.     -> cod_usuario INT(30) NOT NULL,
  46.     -> comentarios VARCHAR(255),
  47.     -> CONSTRAINT PK_coment PRIMARY KEY (cod_cmt, cod_video, cod_usuario ),
  48.     -> CONSTRAINT FK_coment_videos FOREIGN KEY (cod_video) REFERENCES videos (co
  49. d_video),
  50.     -> CONSTRAINT FK_coment_usu FOREIGN KEY (cod_usuario) REFERENCES usuarios (c
  51. od_usu)
  52.     -> ) ENGINE = INNODB DEFAULT CHARSET = utf8;
  53. Query OK, 0 rows affected (0.08 sec)
  54.  
  55. mysql> #Insertamos un registro con las llaves foráneas correctas
  56. mysql> insert into comentarios (cod_video, cod_usuario, comentarios) values (1,
  57. 1, 'comentario');
  58. Query OK, 1 row affected (0.03 sec)
  59.  
  60. mysql> select * from comentarios;
  61. +---------+-----------+-------------+-------------+
  62. | cod_cmt | cod_video | cod_usuario | comentarios |
  63. +---------+-----------+-------------+-------------+
  64. |       1 |         1 |           1 | comentario  |
  65. +---------+-----------+-------------+-------------+
  66. 1 row in set (0.00 sec)
  67.  
  68. mysql> #Verificamos que exista la referencia con la tabla videos
  69. mysql> insert into comentarios (cod_video, cod_usuario, comentarios) values (2,
  70. 1, 'comentario');
  71. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
  72. ails (`pruebas/comentarios`, CONSTRAINT `FK_coment_videos` FOREIGN KEY (`cod_vid
  73. eo`) REFERENCES `videos` (`cod_video`))
  74.  
  75. mysql> #Verificamos que exista la referencia con la tabla usuarios
  76. mysql> insert into comentarios (cod_video, cod_usuario, comentarios) values (1,2
  77. ,'comentario');
  78. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
  79. ails (`pruebas/comentarios`, CONSTRAINT `FK_coment_usu` FOREIGN KEY (`cod_usuario`) REFERENCES `usuarios` (`cod_usu`))



Saludos
Leo