2011-11-15 49 views
0

我有一个表(见下文),其中我添加了一个复合外键到另一个表。我无法将行添加到此表中,因为外键失败,即使父键具有包含复合索引值的记录...所以表格当前为空。无法删除FK /约束(索引)

实际上不需要外键,系统只需要一个Fk到另一个表ID,所以我试着尽我所能删除外键无效,总是得到infrus 150 err。

试图阻止foregn重点检查,然后删除索引,列在钻大胆无法删除或者

这是5月表...

CREATE TABLE `Servicios` (
`Servicio_ID` int(10) unsigned NOT NULL auto_increment, 
`SolSer_ID` int(10) unsigned NOT NULL, 
`ConsecutivoServicio` int(10) unsigned default NULL, 
`ServicioAnt_ID` int(10) unsigned default NULL, 
`FechaAsignada` date NOT NULL COMMENT 'Fecha Asignada para el servicio', 
`HoraAsignada` time NOT NULL COMMENT 'Hora Asignada para hacer el servicio', 
`FechaServicio` date default NULL, 
`HoraServicio` time default NULL, 
`Tecnico_ID` int(10) unsigned NOT NULL, 
`Eq_ID` int(10) unsigned default NULL, 
`ObjetoReporte_ID` int(10) unsigned NOT NULL, 
`TipoFalla_ID` int(10) unsigned NOT NULL, 
`EnergiaRegulada` enum('Si','No') collate utf8_spanish_ci NOT NULL, 
`EstadoAlLlegar` varchar(500) collate utf8_spanish_ci default NULL, 
`DiagnosticoFalla` varchar(500) collate utf8_spanish_ci default NULL, 
`SolProp` varchar(500) collate utf8_spanish_ci default NULL, 
`Observaciones` varchar(500) collate utf8_spanish_ci default NULL, 
`ResultadoServ_ID` int(10) unsigned default NULL, 
`RetiroEquipo` enum('No','Si') collate utf8_spanish_ci default NULL, 
`EstatusServ_ID` int(10) unsigned default NULL, 
`RecibeServicioInt` int(10) unsigned default NULL, 
`PuestoRecibeInt` int(10) unsigned default NULL, 
`FechaRecibe` date default NULL, 
`HoraRecibe` time default NULL, 
`EstatusSolServ_ID` int(10) unsigned NOT NULL, 
`Empresa_ID` int(10) unsigned NOT NULL, 
`Empleado_ID` int(10) unsigned NOT NULL, 
PRIMARY KEY (`Servicio_ID`), 
UNIQUE KEY `FK_Servicios_SolServicio2` (`SolSer_ID`,`Empresa_ID`), 
KEY `Tecnicos` (`Tecnico_ID`), 
KEY `FK_Servicios_ResultadosServicio` (`ResultadoServ_ID`), 
KEY `FK_Servicios_EstatusSolServicios` (`EstatusSolServ_ID`), 
KEY `FK_Servicios_Servicios` (`ServicioAnt_ID`), 
KEY `FK_Servicios_EstatusServicio` (`EstatusServ_ID`), 
KEY `FK_Servicios_TiposFalla` (`TipoFalla_ID`), 
KEY `FK_Servicios_ObjetoReporte` (`ObjetoReporte_ID`), 
KEY `FK_Servicios_Equipos` (`Eq_ID`), 
KEY `FK_Servicios_Empleados` (`Empleado_ID`), 
KEY `Empresa_ID` (`Empresa_ID`), 
**CONSTRAINT `FK_Servicios_SolServicio` FOREIGN KEY (`SolSer_ID`, `Empresa_ID`) REFERENCES `solservicio` (`SolSer_ID`, `Empresa_ID`),** 
CONSTRAINT `Servicios_ibfk_37` FOREIGN KEY (`SolSer_ID`) REFERENCES `SolServicio` (`SolSer_ID`), 
CONSTRAINT `Servicios_ibfk_38` FOREIGN KEY (`Tecnico_ID`) REFERENCES `Empleados` (`Empleado_ID`), 
CONSTRAINT `Servicios_ibfk_39` FOREIGN KEY (`ObjetoReporte_ID`) REFERENCES `ObjetoReporte` (`ObjetoReporteID`), 
CONSTRAINT `Servicios_ibfk_40` FOREIGN KEY (`TipoFalla_ID`) REFERENCES `TiposFalla` (`TipoFalla_ID`), 
CONSTRAINT `Servicios_ibfk_41` FOREIGN KEY (`ResultadoServ_ID`) REFERENCES `ResultadosServicio` (`ResServ_ID`), 
CONSTRAINT `Servicios_ibfk_42` FOREIGN KEY (`EstatusServ_ID`) REFERENCES `EstatusServicio` (`EstatusServ_ID`), 
CONSTRAINT `Servicios_ibfk_43` FOREIGN KEY (`EstatusSolServ_ID`) REFERENCES `EstatusSolServicios` (`EstatusSolServ_ID`), 
CONSTRAINT `Servicios_ibfk_44` FOREIGN KEY (`Empresa_ID`) REFERENCES `Empresas` (`Empresa_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci 

违规的约束。我试图

SET foreign_key_checks = 0; 

ALTER TABLE `Servicios` DROP FOREIGN KEY `FK_Servicios_SolServicio2`; 

ALTER TABLE `Servicios` DROP INDEX `FK_Servicios_SolServicio2`; 

但不断收到:

#1025 - Error on rename of './segucom_SS8/#sql-2ca6_af6829' to './segucom_SS8/Servicios' (errno: 150) 

有趣的是在创建表指的是这个约束为FK_Servicios_SolServicio而不是:FK_Servicios_SolServicio2(在失踪2结束)

以下是其他表

CREATE TABLE SolServicioSolSer_ID INT(10)无符号NOT NULL的auto_increment, Empresa_ID INT(10)无符号NOT NULL, FechaSolicitud日期时间NOT NULL, HoraSolicitud时间NOT NULL, Solicito VARCHAR(20)整理utf8_spanish_ci NOT NULL, SolVia_ID INT(10)无符号NOT NULL, DescripcionFalla VARCHAR(264)整理utf8_spanish_ci NOT NULL, Empleado_ID INT(10)无符号NOT NULL, TipoServ_ID INT(10)无符号NOT NULL, EstatusSolServ_ID INT(10)无符号NOT NULL, ServicioInicial INT(10)无符号默认NULL, PRIMARY KEY(SolSer_IDEmpresa_ID) KEY IX_SolServicio2Empleado_ID) KEY IX_SolServicio3Empresa_ID) KEY FK_SolServicio_TiposServicioTipoServ_ID), KEY FK_SolServicio_EstatusSolServiciosEstatusSolServ_ID) KEY FK_SolServicio_SolicitudViaSolVia_ID) KEY FK_SolServicio_EmpleadosEmpleado_ID) 约束SolServicio_ibfk_1外键(Empresa_ID)参考文献EmpresasEmpresa_ID) 约束SolServicio_ibfk_2外键(SolVia_ID)参考文献SolicitudViaSolVia_ID) 约束SolServicio_ibfk_3外键(Empleado_ID)参考文献EmpleadosEmpleado_ID) 约束SolServicio_ibfk_4外键(TipoServ_ID)参考文献TiposServicioTipoServ_ID) 约束SolServicio_ibfk_5外键(EstatusSolServ_ID)参考文献EstatusSolServiciosEstatusSolServ_ID) )ENGINE = InnoDB的AUTO_INCREMENT = 7默认字符集= UTF8 COLLATE = utf8_spanish_ci

+0

我们可以看另一张表吗? –

+0

是的,我编辑我的问题添加其他表 – Abhik

回答

0

嗯,对我来说,它看起来像一个错字:你有尝试外键的名称的唯一密钥删除(FK_Servicios_SolServicio2)。并且您有一个外键,其名称为FK_Servicios_SolServicio,您在脚本中用**标记。显然你不能删除一个唯一的密钥DROP FOREIGN KEY。我建议再试一次

ALTER TABLE `Servicios` DROP FOREIGN KEY `FK_Servicios_SolServicio`; 
0

编辑:对不起,没有看到你已经尝试过这种

尝试

SET foreign_key_checks = 0; 
ALTER TABLE `Servicios` DROP FOREIGN KEY `FK_Servicios_SolServicio2`; 
SET foreign_key_checks = 1; 
+0

放宽FK约束从来就不是一个好主意... –

+0

谢谢你的尝试 – Abhik

+0

@Digital Precision我修改,而不是删除约束,另一个表上有另一个约束的复合指数,所以最终我不会错过“复合指数”的要求,我没有注意到当我做了compund指数..反正 – Abhik