Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Problema con un alter y foreign key (https://www.clubdelphi.com/foros/showthread.php?t=58725)

lookmydoom 30-07-2008 02:43:59

Problema con un alter y foreign key
 
Buenas, tengo un problema con unas modificaciones en una tabla y es que ya he probado varias combinaciones del comando Alter pero ninguna parece funcionar.

Les paso la estructura de dicha tabla

Código SQL [-]
CREATE TABLE `menu` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `descripcion` char(255) NOT NULL default '',
  `codigo` char(20) default NULL,
  `referencia` char(255) default NULL,
  `precio` decimal(10,2) NOT NULL default '0.00',
  `tieneEspecial` tinyint(3) unsigned NOT NULL default '0',
  `casoAdicional` tinyint(3) unsigned NOT NULL default '0',
  `estado` tinyint(3) unsigned NOT NULL default '1',
  `id_Medida` tinyint(3) unsigned NOT NULL default '0',
  `id_Categoria` tinyint(3) unsigned NOT NULL default '0',
  `id_Punto_Produccion` tinyint(3) unsigned NOT NULL default '0',
  `id_Impresora` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `pkMenu` (`id`),
  KEY `fkMedida` (`id_Medida`),
  KEY `fkCategoria` (`id_Categoria`),
  KEY `fkPunto_ProduccionMenu` (`id_Punto_Produccion`),
  KEY `fkImpresora` (`id_Impresora`),
  CONSTRAINT `0_84` FOREIGN KEY (`id_Medida`) REFERENCES `medida` (`id`),
  CONSTRAINT `0_85` FOREIGN KEY (`id_Categoria`) REFERENCES `categoria` (`id`),
  CONSTRAINT `0_86` FOREIGN KEY (`id_Punto_Produccion`) REFERENCES `punto_produccion` (`id`),
  CONSTRAINT `0_87` FOREIGN KEY (`id_Impresora`) REFERENCES `impresora` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Bueno antes de seguir aviso que estoy usando el mysql 4 ya que en un momento pence que podria ser la versión.

En fin, el problema radica en que necesito eliminar de esta tabla las 2 ultimas columnas que son id_Punto_Produccion e id_Impresora para esto ya me encarge de evitar que las tablas a las cuales hacen referencia las 4 llaves foraneas no molesten; esto lo hice renombrando dichas tablas, supongo que con eso basta para que no haya problemas con la integridad referencial, ya que puedo eliminar estas columnas a punta de clic y next, pero necesito que sea via sql.

Espero me den alguna ayuda ya que probe de varias formas y de ninguna me funciono.

roman 30-07-2008 03:00:50

¿No tendrías que eliminar pimero las restricciones en sí? Algo como

Código SQL [-]
alter table menu
drop foreign key 0_86

// Saludos

lookmydoom 30-07-2008 16:03:41

Muchas gracias lo solucione con eso, pongo la consulta completa por si le sirve a alguien.

Código SQL [-]
alter table menu drop foreign key 0_86;
 alter table menu drop foreign key 0_87;
 alter table menu drop column id_punto_produccion;
 alter table menu drop column id_impresora;

Pero el tema de las restricciones ya me creo una duda, como seria la consulta si quisiera aumentar una foreign key a una tablaX campo ID con la opcion de "on delete cascade on update cascade" ?.

roman 30-07-2008 16:25:43

Código SQL [-]
alter table menu
add foreign key (id_Punto_Produccion)
references punto_produccion(id)
on delete cascade
on update cascade

// Saludos

lookmydoom 30-07-2008 17:17:53

Te cuento que no me funciona, obiamente primero agrege la columna nueva para luego probar con el ejemplo que me diste pero siempre me sale el mismo error: "1005 can't create table '.\myDB\#sql-7a0_9.frm' (errno: 150)".

No habria que crear antes de la foranea algun key, index o contraint?

Yo lo hice en este orden:

crear la columna.// la creo sin ningun problema.
.
. // crear algun index o definir el constrain?
.
crear la foranea // aqui es donde me da ese error

roman 30-07-2008 17:33:32

Pues no se me ocurre dónde puede estar el error. Desde luego, además de crear la columna que hace de llave foránea, la tabla de referencia (punto_produccion en este caso) debe existir previamente.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:02:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi