Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
errno:150 mysql
Enviado por montver el día 17 de marzo de 2004
hola,
Espero que alguien me pueda ayudar.
Resulta que intento crear tablas con varias claves foraneas y la opcion INNODB, pero me da error y no soy capaz de saber que significa.
ERROR que me da:
can't create table BD/Estado.frm (errno:150)
En otra seccion de esta web creo ke konteste hoy lo mismo
Hay ke crear un indice antes del campo de la foreign key:
key segment_part_segment_id (segment_id),
foreign key (segment_id) references segment(id),
CREATE TABLE `TipoTransaccion` (
`idTipoTransaccion` INTEGER(2) UNSIGNED NOT NULL AUTO_INCREMENT,
`Descripcion` VARCHAR(30) NOT NULL,
`Operacion` ENUM('Suma','Resta') NOT NULL DEFAULT 'Suma',
`Observaciones` TEXT NULL,
PRIMARY KEY(`idTipoTransaccion`)
)
TYPE=InnoDB;
CREATE TABLE `administrador` (
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador_2` INTEGER(3) UNSIGNED NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NOT NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`FechadeAlta` DATE NOT NULL DEFAULT '0000-00-00',
`FechadeBaja` DATE NULL,
PRIMARY KEY(`Id_Administrador`),
INDEX `administrador_FKIndex1`(`Id_Administrador_2`),
FOREIGN KEY(`Id_Administrador_2`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Cliente` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL,
`Id_Tipo_Membresia_Empresa` VARCHAR(30) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`Rutaimagenes` VARCHAR(255) NULL,
`Fechadealta` DATE NOT NULL DEFAULT '0000-00-00',
`Fechadebaja` DATE NULL,
PRIMARY KEY(`Id_Cliente`),
INDEX `Cliente_FKIndex1`(`Id_Tipo_Membresia_Empresa`),
INDEX `Cliente_FKIndex2`(`Id_Administrador`),
INDEX `Cliente_index1904`(`Id_Cliente`),
FOREIGN KEY(`Id_Tipo_Membresia_Empresa`)
REFERENCES `membresia_cliente`(`Id_Tipo_Membresia_Empresa`)
ON DELETE SET NULL
ON UPDATE NO ACTION,
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `impresor` (
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL,
`Id_Tipo_Membresia_Impresor` VARCHAR(30) NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`Fechadealta` DATE NULL,
`Fechadebaja` DATE NULL,
PRIMARY KEY(`Id_Impresor`),
INDEX `impresor_FKIndex1`(`Id_Tipo_Membresia_Impresor`),
INDEX `impresor_FKIndex2`(`Id_Administrador`),
INDEX `impresor_index1907`(`Id_Impresor`),
FOREIGN KEY(`Id_Tipo_Membresia_Impresor`)
REFERENCES `membresia_impresor`(`Id_Tipo_Membresia_Impresor`)
ON DELETE SET NULL
ON UPDATE NO ACTION,
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `usuario` (
`Id_Usuario` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Cliente` INTEGER(5) UNSIGNED NULL,
`Id_Tipo_Usuario` TINYINT(2) UNSIGNED NULL,
`Id_Administrador` INTEGER(3) UNSIGNED NULL,
`Id_Impresor` INTEGER(5) UNSIGNED NULL,
`Nombre` VARCHAR(30) NOT NULL,
`Clave` VARCHAR(50) NOT NULL,
`Email` VARCHAR(30) NOT NULL,
`Status` CHAR(1) NOT NULL,
`Fecha_Alta` DATE NOT NULL DEFAULT '0000-00-00',
`Fecha_Baja` DATE NULL,
PRIMARY KEY(`Id_Usuario`),
INDEX `usuario_FKIndex1`(`Id_Administrador`),
INDEX `usuario_FKIndex2`(`Id_Tipo_Usuario`),
INDEX `usuario_FKIndex3`(`Id_Cliente`),
INDEX `usuario_FKIndex4`(`Id_Impresor`),
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Tipo_Usuario`)
REFERENCES `tipo_usuario`(`Id_Tipo_Usuario`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
TYPE=InnoDB;
CREATE TABLE `Servicios` (
`idServicios` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Descripcion` VARCHAR(50) NULL,
`Precio` DECIMAL NULL,
`Observasiones` TEXT NULL,
PRIMARY KEY(`idServicios`),
INDEX `Servicios_FKIndex1`(`Id_Impresor`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
-- ------------------------------------------------------------
-- Especilizacion del Cliente como Persona
-- ------------------------------------------------------------
CREATE TABLE `Persona` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Nombre` VARCHAR(20) NULL,
`Materno` VARCHAR(20) NULL,
`Paterno` VARCHAR(20) NULL,
`Sexo` ENUM('M','F') NULL,
INDEX `Persona_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Persona_index1663`(`Nombre`, `Materno`, `Paterno`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Impresora` (
`idImpresora` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Descripcion` VARCHAR(50) NOT NULL,
`FechaActivacion` DATE NULL,
`ImpresoraActiva` BOOL NULL DEFAULT 'False',
`CostoBasicoDeImpresion` DECIMAL NULL,
`PrecioBasicoDeImpresion` DECIMAL NULL,
`DireccionIP` VARCHAR(15) NULL,
PRIMARY KEY(`idImpresora`),
INDEX `Impresora_FKIndex1`(`Id_Impresor`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Escuela` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Nombre` VARCHAR(100) NOT NULL,
`Nivel` ENUM('Primaria','Secundaria','Preparatoria','Profesional') NULL,
INDEX `Escuela_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Escuela_index1658`(`Nombre`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
-- ------------------------------------------------------------
-- Especializacion de cliente como empresa
-- ------------------------------------------------------------
CREATE TABLE `Empresa` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Giro` ENUM('Servicio','Comercio','Industria') NOT NULL,
INDEX `Empresa_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Empresa_index1653`(`RazonSocial`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
-- ------------------------------------------------------------
-- Cuenta de Servicios
--
-- Cuando un cliente quiere imprimir en un centro de impresion tiene que ir al centro de impresion a pagar o solicitar credito por el servicio, la cuenta esta formada por un conjunto de transacciones entre el cliente y el centro de impresion
-- ------------------------------------------------------------
CREATE TABLE `Cuenta` (
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`SaldoInicial` DECIMAL NOT NULL DEFAULT '0',
`TotalAbono` DECIMAL NOT NULL DEFAULT '0',
`TotalCargo` DECIMAL NOT NULL DEFAULT '0',
`SaldoActual` DECIMAL NOT NULL DEFAULT '0',
`FechaApertura` DATE NOT NULL,
`Observaciones ` TEXT NULL,
PRIMARY KEY(`Id_Impresor`, `Id_Cliente`),
INDEX `Cuenta_FKIndex1`(`Id_Impresor`),
INDEX `Cuenta_FKIndex2`(`Id_Cliente`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Impresora_has_PropiedadesImpresora` (
`idImpresora` INTEGER(5) UNSIGNED NOT NULL,
`idPropiedadesImpresora` INTEGER(5) UNSIGNED ZEROFILL NOT NULL,
`PropiedadImpresionActiva` BOOL NULL,
`CostoPropiedadimpresion` DECIMAL NULL,
`PrecioPropiedadImpresion` DECIMAL NULL,
PRIMARY KEY(`idImpresora`, `idPropiedadesImpresora`),
INDEX `Impresora_has_PropiedadesImpresora_FKIndex1`(`idImpresora`),
INDEX `Impresora_has_PropiedadesImpresora_FKIndex2`(`idPropiedadesImpresora`),
FOREIGN KEY(`idImpresora`)
REFERENCES `Impresora`(`idImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`idPropiedadesImpresora`)
REFERENCES `PropiedadesImpresora`(`idPropiedadesImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `SolicitudDeImpresion` (
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`idServicios` INTEGER(6) UNSIGNED NOT NULL,
`idImpresora` INTEGER(5) UNSIGNED NOT NULL,
`FechaSolicitud` DATE NOT NULL,
`FechaEntrega` DATE NULL,
`Liberada` BOOL NULL DEFAULT 'False',
PRIMARY KEY(`NoSolicitud`),
INDEX `SolicitudDeImpresion_FKIndex3`(`idImpresora`),
INDEX `SolicitudDeImpresion_FKIndex3`(`idServicios`),
INDEX `SolicitudDeImpresion_FKIndex3`(`Id_Cliente`),
FOREIGN KEY(`idImpresora`)
REFERENCES `Impresora`(`idImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`idServicios`)
REFERENCES `Servicios`(`idServicios`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `OrdenImpresion` (
`idOrdenImpresion` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`FechaImpresion` DATE NULL,
`EstadoDeImpresion` ENUM('En Impresion','Impresa','Reimprimiendo','En Pausa','Cancelada') NULL DEFAULT 'En Impresion',
`ImpresionOK` BOOL NULL DEFAULT 'False',
`Observaciones` TEXT NULL,
PRIMARY KEY(`idOrdenImpresion`),
INDEX `OrdenImpresion_FKIndex1`(`NoSolicitud`),
FOREIGN KEY(`NoSolicitud`)
REFERENCES `SolicitudDeImpresion`(`NoSolicitud`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Documento` (
`idDocumento` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`NombreDocumento` TEXT NULL,
`TipoDocumento` ENUM('TXT','DOC','XLS','PDF') NULL,
`Fecha` DATE NULL,
`SizeenKbytes` DECIMAL NULL,
PRIMARY KEY(`idDocumento`, `NoSolicitud`),
INDEX `Documento_FKIndex1`(`NoSolicitud`),
FOREIGN KEY(`NoSolicitud`)
REFERENCES `SolicitudDeImpresion`(`NoSolicitud`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
CREATE TABLE `Transaccion` (
`idTransaccion` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`idTipoTransaccion` INTEGER(2) UNSIGNED NOT NULL,
`Fecha` DATE NOT NULL,
`Importe` DECIMAL NOT NULL,
`Descripcion` VARCHAR(50) NULL,
PRIMARY KEY(`idTransaccion`),
INDEX `Transaccion_FKIndex1`(`idTipoTransaccion`),
INDEX `Transaccion_FKIndex2`(`Id_Impresor`, `Id_Cliente`),
FOREIGN KEY(`idTipoTransaccion`)
REFERENCES `TipoTransaccion`(`idTipoTransaccion`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Impresor`, `Id_Cliente`)
REFERENCES `Cuenta`(`Id_Impresor`, `Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;
Hola, en mysql antes de crear alguna restriccion de foreign key tenes que crear un indice para ese foreign key, sino te va a seguir tirando ese error,
Saludos.
Enviado por silvana el día 17 de noviembre de 2005
Despu�s de consultar varios foros,
la �nica solucion que encontre fue crear una tabla nueva con la misma estructura, sin indices m�s que la PK, y sin FKs.
Copiar los datos de la tabla original a esta �ltima,
dropear la tabla original, crearla nuevamente con la FK modificada y traer los datos de la tabla copia. No es en un solo paso pero funciona.
Suerte.
No entiendo lo que quereis decir con crear un indice y despues la clave foranea....... A ver, la tabla que intento construir es simple:
CREATE TABLE scabd.secciones (
idSeccion INT NOT NULL,
nombreSeccion VARCHAR(20),
descSeccion VARCHAR(50),
encargadoSeccion VARCHAR(30),
PRIMARY KEY (idSeccion),
FOREIGN KEY (idSeccion) REFERENCES silos(idSeccion)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE=InnoDB;
tengo una tabla llamadas 'silos' que contiene 2 campos como clave principal. Uno de ellos es el campo idSeccion, y el otro idSilo. Ahora lo que quiero es tener una tabla con el idSeccion de la otra tabla, pero me da ese error.
Que tengo que hacer para insertar ese indice que comentais??
El origen del problema puede ser diferente en cada caso, para verificar la causa del error en la ultima sentencia SQL realizada, se puede usar el comando SHOW INNODB STATUS, el cual da mas detalles del error. Saludos a todos
Señores yo ando en algo como esto:
CREATE TABLE r_problemaxinforme(
codinfser INT NOT NULL,
cantidad INT NOT NULL,
codproblema INT NOT NULL,
codequipo INT NOT NULL,
numserie INT NOT NULL,
codir SMALLINT NOT NULL,
codcli INT DEFAULT 0 NOT NULL,
PRIMARY KEY (codinfser, codproblema, codequipo, numserie, codir, codcli),
CONSTRAINT Refr_lineainformes291 FOREIGN KEY (codinfser, codequipo, numserie, codir, codcli)
REFERENCES r_lineainformes(codinfser, codir, codequipo, numserie, codcli) ON DELETE CASCADE,
CONSTRAINT Refr_problema301 FOREIGN KEY (codproblema)
REFERENCES r_problema(codproblema)
)ENGINE=INNODB
;
Es una tabla creada a partir de otras 2, que hereda su clave de otras 2, osea una entidad débil. Todas las tablas son INNODB, están indexadas. No se que puede estar pasando. Alguna idea? Gracias