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

errno 150

Estas en el tema de errno 150 en el foro de Mysql en Foros del Web. Hola a todos estoy intentando crear una base de datos relacional en mysql y me da el siguiente error #1005 - Can't create table 'test.comentarios' ...
  #1 (permalink)  
Antiguo 03/02/2011, 07:49
 
Fecha de Ingreso: febrero-2009
Mensajes: 147
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta errno 150

Hola a todos estoy intentando crear una base de datos relacional en mysql y me da el siguiente error
#1005 - Can't create table 'test.comentarios' (errno: 150)
Cita:
Tabla comentarios

Código MySQL:
Ver original
  1. CREATE TABLE comentarios(
  2. cod_cmt INT( 30 ) AUTO_INCREMENT ,
  3. cod_video INT( 30 ) NOT NULL ,
  4. cod_usuario INT( 30 ) NOT NULL ,
  5. comentarios VARCHAR( 600 ) ,
  6. CONSTRAINT PK_coment PRIMARY KEY ( cod_cmt, cod_video, cod_usuario ) ,
  7. CONSTRAINT FK_coment_videos FOREIGN KEY ( cod_video ) REFERENCES videos,
  8. CONSTRAINT FK_coment_usu FOREIGN KEY ( cod_usuario ) REFERENCES usuarios

Cita:
Tabla Usuarios

Código MySQL:
Ver original
  1. create table usuarios(
  2.   cod_usu int(30) AUTO_INCREMENT,
  3.   usuarios varchar(60) not null,
  4.   passwords varchar(60) not null,
  5.   constraint PK_usuarios primary key (cod_usu)

la tabla videos esta igual (con cod_video como clave primaria)

que es lo que sucede?
Gracias de antemano
  #2 (permalink)  
Antiguo 03/02/2011, 15:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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

Etiquetas: Ninguno
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 07:56.