MySQL - Error persistente nº150 de MySQL

   
Vista:

Error persistente nº150 de MySQL

Publicado por antoni (21 intervenciones) el 17/03/2015 12:08:49
Biuenas:
he intentado con diferentes combinaciones el comando Sql que describo al final, pero siempre me da el famoso error 150 de que no puede crear la tabla cuando se referencian otras tablas. Todos los id referenciados son claves primarias auto_increment. Si solo hago una referencia en vez de tres entonces si se me crea la tabla:

create table compras_lin(id int auto_increment primary key, NCompra int not null default 1, Articulo int(6) not null default 1, Descipcion char(20) default '', Cantidad double(8,2) default 1.00, Precio double (9,2) default 0.00, Descuento float(4,1) default 0.0, Tipo_IVA tinyint(3) not null default 1,Neto double(9,2) default 0.00, foreign key(NCompra) references compras_cab(id), foreign key(Articulo) references articulos(id), foreign key(Tipo_IVA) references tipos_iva(id)) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8.

¿ como la puedo crear con esas tres referencias ? me harán un gran favor si me pueden orientar

Gracias
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Error persistente nº150 de MySQL

Publicado por xve (899 intervenciones) el 17/03/2015 15:10:45
Hola Antoni, simplemente indica que quieres utilizar el tipo MyISAM en vez de InnoDB

Creo recordar que el problema es que InnoDB no permite claves foraneas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error persistente nº150 de MySQL

Publicado por antoni (21 intervenciones) el 17/03/2015 16:37:59
xve gracias por tu ayuda,

InnoDB por lo que veo permite claves foráneas con limitación, en mi caso me deja crear con una sola clave foránea.
.
MyISAM te deja crear la tabla con varias claves foráneas pero luego parece como si no las contemplaran ya que por un lado puedes grabar registros con claves foráneas que no existen sin que te de un mensaje de error,
y por otro lado si vas a buscar las claves foráneas que tiene una tabla, aunque esa tabla la crearas con claves foráneas, no quedan registradas en la db "information_schema", lo he intentado como suelo hacer con la siguiente orden y me resulta un set vacio:

select column_name, referenced_table_name,referenced_column_name from information_schema.key_column_usage where referenced_table_name is not null and constraint_schema='".$DB."' and table_name='".$Tabladetalle."'

Si haces un "describe tablename" si que figura en el apartado key la palabra MUL, pero parece aunque no estoy seguro que es lo único que hace.
Quizás haya otra forma de insertar registros y de saber las claves foráneas de una tabla cuando se usa la tecnología MyISAM, tendré que investigarlo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error persistente nº150 de MySQL

Publicado por eyanez (17 intervenciones) el 17/03/2015 16:41:24
INNODB es un motor transaccional compatible con ACID claro que permite multiples claves foraneas, MyISAM aunque la sentencia create no te dara error las claves foraneas no funcionan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error persistente nº150 de MySQL

Publicado por eyanezve (17 intervenciones) el 17/03/2015 16:39:43
Hola verifica los tipos de datos de las tablas relacionales, por que si es diferente no te deja crear la tabla yo comenzaria con Tipo_IVA tinyint(3) a ver si en la tabla tipos_iva(id) no este integer, hice una pequeña prueba y funciono correctamente tu sentencia create con los tipos de datos correctos en las tablas relacionales

create table tipos_iva(
id int auto_increment primary key
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

create table articulos(
id int auto_increment primary key
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

create table compras_cab(
id int auto_increment primary key
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

create table compras_lin(
id int auto_increment primary key,
NCompra int not null default 1,
Articulo int(6) not null default 1,
Descipcion char(20) default '',
Cantidad double(8,2) default 1.00,
Precio double (9,2) default 0.00,
Descuento float(4,1) default 0.0,
Tipo_IVA tinyint(3) not null default 1,
Neto double(9,2) default 0.00,
foreign key(NCompra) references compras_cab(id),
foreign key(Articulo) references articulos(id),
foreign key(Tipo_IVA) references tipos_iva(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Error persistente nº150 de MySQL

Publicado por antoni (21 intervenciones) el 17/03/2015 17:53:26
eyavezne eres genial !

muchas gracias por tu gran ayuda,
efectivamente era por la diferencia en los tipos de los datos relacionados.

estoy en deuda contigo, me gustaría corresponder, yo programo en Android y lo solía hacer en C, C++, si puedo ayudar lo haré encantado.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error persistente nº150 de MySQL

Publicado por eyanez (17 intervenciones) el 17/03/2015 19:15:32
No hay de que para eso estamos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Error persistente nº150 de MySQL

Publicado por xve (899 intervenciones) el 17/03/2015 18:11:04
Excelente Eyanezve!!! gracias por la explicación...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error persistente nº150 de MySQL

Publicado por eyanez (17 intervenciones) el 17/03/2015 19:15:48
No hay de que para eso estamos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error persistente nº150 de MySQL

Publicado por antoni (21 intervenciones) el 19/03/2015 04:50:10
Gracias,

así da gusto, me descubro ante vuestra competente sabiduría.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar