2011-11-15 50 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