【发布时间】:2011-12-29 06:29:23
【问题描述】:
我有一个表(见下文),其中我向另一个表添加了一个复合外键。我无法向该表添加行,因为外键失败,即使父键具有复合索引值的记录......所以表当前是空的。
确实不需要外键,系统对另一个表ID使用一个Fk就足够了,所以我尽力删除外键无济于事,总是得到infamus 150 err。
试图停止外键检查,然后删除索引,列,bur也无法删除
这是五月桌……
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)
这是另一张桌子
创建表SolServicio (
SolSer_ID int(10) unsigned NOT NULL auto_increment,
Empresa_ID int(10) 无符号非空,
FechaSolicitud 日期时间不为空,
HoraSolicitud 时间不为空,
Solicito varchar(20) 整理 utf8_spanish_ci NOT NULL,
SolVia_ID int(10) 无符号非空,
DescripcionFalla varchar(264) 整理 utf8_spanish_ci 非空,
Empleado_ID int(10) 无符号非空,
TipoServ_ID int(10) 无符号非空,
EstatusSolServ_ID int(10) 无符号非空,
ServicioInicial int(10) 无符号默认 NULL,
主键 (SolSer_ID,Empresa_ID),
键IX_SolServicio2 (Empleado_ID),
键IX_SolServicio3 (Empresa_ID),
键FK_SolServicio_TiposServicio (TipoServ_ID),
键FK_SolServicio_EstatusSolServicios (EstatusSolServ_ID),
键FK_SolServicio_SolicitudVia (SolVia_ID),
键FK_SolServicio_Empleados (Empleado_ID),
约束SolServicio_ibfk_1外键(Empresa_ID)参考Empresas(Empresa_ID),
约束SolServicio_ibfk_2外键(SolVia_ID)参考SolicitudVia(SolVia_ID),
约束SolServicio_ibfk_3外键(Empleado_ID)参考Empleados(Empleado_ID),
约束SolServicio_ibfk_4外键(TipoServ_ID)参考TiposServicio(TipoServ_ID),
约束 SolServicio_ibfk_5 外键 (EstatusSolServ_ID) 参考 EstatusSolServicios (EstatusSolServ_ID)
) ENGINE=InnoDB AUTO_INCREMENT=7 默认字符集=utf8 COLLATE=utf8_spanish_ci
【问题讨论】:
-
是的,我正在编辑我的问题添加另一个表
标签: mysql