foreign ejemplo drop constraint cannot sql mysql foreign-keys

drop - foreign key mysql ejemplo



¿Llaves extranjeras múltiples? (3)

Ejecuté el código aquí, y el mensaje de error mostró (¡y es correcto!) Que está configurando el campo de identificación dos veces como clave principal.

Tengo una tabla que se supone que rastrea los días y los costos de envío de productos de un proveedor a otro. Nosotros (brillantemente: p) almacenamos tanto a los proveedores de envío (FedEx, UPS) como a los proveedores de manejo de productos (Think ... Dunder Mifflin) en una mesa "VENDOR". Por lo tanto, tengo tres columnas en mi tabla SHIPPING_DETAILS que hacen referencia a VENDOR.no. Por algún motivo, MySQL no me permite definir las tres claves foráneas. ¿Algunas ideas?

CREATE TABLE SHIPPING_GRID( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT ''Unique ID for each row'', shipping_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)'', start_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to VENDOR.no for the vendor being shipped from'', end_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to the VENDOR.no for the vendor being shipped to'', shipment_duration INT(1) DEFAULT 1 COMMENT ''Duration in whole days shipment will take'', price FLOAT(5,5) NOT NULL COMMENT ''Price in US dollars per shipment lbs (down to 5 decimal places)'', is_flat_rate TINYINT(1) DEFAULT 0 COMMENT ''1 if is flat rate regardless of weight, 0 if price is by lbs'', INDEX (shipping_vendor_no), INDEX (start_vendor_no), INDEX (end_vendor_no), FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) ) TYPE = INNODB;

Editado para eliminar la doble definición de clave primaria ...

Sí, desafortunadamente eso no lo solucionó. Ahora estoy obteniendo:

No se puede crear la tabla ''./ REMOVED MY DB NAME /SHIPPING_GRID.frm'' (error: 150)

Hacer un phpinfo () me dice esto para mysql:

Client API versión 5.0.45

Sí, el VENDOR.no es tipo int (6).


Usted definió la clave primaria dos veces. Tratar:

CREATE TABLE SHIPPING_GRID( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT ''Unique ID for each row'', shipping_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)'', start_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to VENDOR.no for the vendor being shipped from'', end_vendor_no INT(6) NOT NULL COMMENT ''Foreign key to the VENDOR.no for the vendor being shipped to'', shipment_duration INT(1) DEFAULT 1 COMMENT ''Duration in whole days shipment will take'', price FLOAT(5,5) NOT NULL COMMENT ''Price in US dollars per shipment lbs (down to 5 decimal places)'', is_flat_rate TINYINT(1) DEFAULT 0 COMMENT ''1 if is flat rate regardless of weight, 0 if price is by lbs'', INDEX (shipping_vendor_no), INDEX (start_vendor_no), INDEX (end_vendor_no), FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) ) TYPE = INNODB;

La clave primaria VENDOR debe ser INT (6), y ambas tablas deben ser de tipo InnoDB.


¿Puedes proporcionar la definición de la tabla de VENDEDORES?

Me lo imaginé. La tabla VENDOR fue MyISAM ... (editó su respuesta para decirme que los haga a ambos INNODB;))

(¿Alguna razón para no cambiar el tipo de VENDEDOR a INNODB?)