error 1005 mysql

keto
10 de Abril del 2004
hola me gustaria que me explique el error 1005 cuando creo una tabla y que me comenten que error tengo con estas tablas

CREATE TABLE `provincias` (
`id_provi` int unsigned NOT NULL default '0',
`nom_provi` char(50) default NULL,
PRIMARY KEY (`id_provi`)
) TYPE=INNODB;


CREATE TABLE `clientes` (
`id_cli` int unsigned NOT NULL default '0',
`id_provi` int default NULL,
`nom_cli` char(50) default NULL,
`ape_cli` char(50) default NULL,
`cuil` char(50) default NULL,
`cuit` char(50) default NULL,
`dir_cli` char(50) default NULL,
`tel` char(50) default NULL,
`cond_iva` int unsigned default NULL,
PRIMARY KEY (`id_cli`),
INDEX(id_provi),
FOREIGN KEY(id_provi) REFERENCES provincias(`id_provi`)
) TYPE=INNODB;

cuando creo la tabla de cliente me sale un mensaje
error 1005 can't create table (errno: 150)

muchas gracias
keto

LUIFER
10 de Abril del 2004
Hola, yo tengo el mismo problema y estoy trabajando con MySQL-Front, alguien me puede explicar este error de MySQL con el ejemplo de los clientes y las provincias??

Edeldir
10 de Abril del 2004
Debes crear un indice para el campo al que vas a enlazar ANTES de la Foreign Key, por ejemplo:
key segment_part_segment_id (segment_id),
foreign key (segment_id) references segment(id),

lasweb
10 de Abril del 2004
Esto que te paso mas abajo esta extraido de un articulo de este mismo lugar http://www.programacion.com/

para leerlo mas in extenso te recomiendo que entres en http://www.programacion.com/tutorial/mysql_referencial/


Las columnas correspondientes en la clave foránea y en la clave referenciada deben tener tipos de datos similares para que puedan ser comparadas sin la necesidad de hacer una conversión de tipos. El tamaño y el signo de los tipos enteros debe ser el mismo. En las columnas de tipo caracter, el tamaño no tiene que ser el mismo necesariamente.

Si MySQL da un error cuyo número es el 1005 al momento de ejecutar una sentencia CREATE TABLE, y el mensaje de error se refiere al número 150, la creación de la tabla falló porque la restricción de la clave foránea no se hizo de la manera adecuada. De la misma manera, si falla una sentencia ALTER TABLE y se hace referencia al error número 150, esto significa que la definición de la restricción de la clave foránea no se hizo adecuadamente. A partir de la versión 4.0.13 de MySQL, se puede usar la sentencia SHOW INNODB STATUS para ver una explicación detallada del último error que se generó en relación a la definición de una clave foránea.