Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2008
Avatar de lookmydoom
lookmydoom lookmydoom is offline
Miembro
 
Registrado: abr 2006
Posts: 102
Poder: 19
lookmydoom Va por buen camino
Question 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.

Última edición por lookmydoom fecha: 30-07-2008 a las 02:46:15.
Responder Con Cita
  #2  
Antiguo 30-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿No tendrías que eliminar pimero las restricciones en sí? Algo como

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

// Saludos
Responder Con Cita
  #3  
Antiguo 30-07-2008
Avatar de lookmydoom
lookmydoom lookmydoom is offline
Miembro
 
Registrado: abr 2006
Posts: 102
Poder: 19
lookmydoom Va por buen camino
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" ?.
Responder Con Cita
  #4  
Antiguo 30-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Código SQL [-]
alter table menu
add foreign key (id_Punto_Produccion)
references punto_produccion(id)
on delete cascade
on update cascade

// Saludos
Responder Con Cita
  #5  
Antiguo 30-07-2008
Avatar de lookmydoom
lookmydoom lookmydoom is offline
Miembro
 
Registrado: abr 2006
Posts: 102
Poder: 19
lookmydoom Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 30-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con Foreign key franfl C++ Builder 12 29-05-2008 19:57:05
Problema Foreign key franfl Firebird e Interbase 2 27-05-2008 19:38:03
problema foreign key sargento elias Conexión con bases de datos 4 21-04-2008 22:51:05
alter table y default jonmendi SQL 1 10-11-2005 17:32:05
Alter view EITB Firebird e Interbase 1 29-09-2004 12:11:33


La franja horaria es GMT +2. Ahora son las 18:27:26.


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
Copyright 1996-2007 Club Delphi