2017-10-04 8 views
1

Je veux ajouter une clé étrangère dans tblprowareinventory chaque fois que j'insérer dans tblprowareproducts:déclencheur MySQL insérer après insertion dans une autre table

phpmyadmin tblProwareproducts

CREATE TABLE `tblprowareproducts` (
    `ItemID` int(11) NOT NULL, 
    `ItemCode` varchar(30) NOT NULL, 
    `itemDescription` varchar(60) NOT NULL, 
    `Strand` varchar(30) NOT NULL, 
    `UnitCost` double NOT NULL, 
    `SaleCost` double NOT NULL, 
    `CategoryID_fk` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


ALTER TABLE `tblprowareproducts` 
    ADD PRIMARY KEY (`ItemID`), 
    ADD KEY `CategoryID_fk` (`CategoryID_fk`); 


ALTER TABLE `tblprowareproducts` 
    MODIFY `ItemID` int(11) NOT NULL AUTO_INCREMENT; 

ALTER TABLE `tblprowareproducts` 
    ADD CONSTRAINT `tblprowareproducts_ibfk_1` FOREIGN KEY (`CategoryID_fk`) REFERENCES `tblprowarecategory` (`PCategoryID`) ON DELETE CASCADE ON UPDATE CASCADE; 
COMMIT; 

tblProwareinventory

CREATE TABLE `tblprowareinventory` (
    `inventoryID` int(11) NOT NULL, 
    `ItemID_FK` int(11) NOT NULL, 
    `DateOfInventory` date NOT NULL, 
    `CurrentQuantity` int(11) NOT NULL, 
    `TotalQuantity` int(11) NOT NULL, 
    `DeliveredQuantity` int(11) NOT NULL, 
    `PhysicalCount` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `tblprowareinventory` 
    ADD PRIMARY KEY (`inventoryID`), 
    ADD KEY `ItemID_FK` (`ItemID_FK`); 


ALTER TABLE `tblprowareinventory` 
    ADD CONSTRAINT `tblprowareinventory_ibfk_2` FOREIGN KEY (`ItemID_FK`) REFERENCES `tblprowareproducts` (`ItemID`) ON DELETE CASCADE ON UPDATE CASCADE; 
COMMIT; 

INSERT INTO tblprowareinventory(ItemID_FK) 
VALUES ((SELECT ItemID FROM tblprowareproducts)) 

mais je obtenir cette erreur:

error

+0

est inventoryid un auto_increment? –

+0

Oui, il auto_increment – Alpha

Répondre

1

Vous pouvez utiliser l'instruction CREATE TRIGGER suivante:

DELIMITER // 
CREATE DEFINER = `root`@`localhost` TRIGGER AddToInventory AFTER INSERT ON tblprowareproducts 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO tblprowareinventory (ItemID_FK) VALUES (NEW.ItemID); 
    END;// 
DELIMITER ; 

Note: Vous devez retirer votre déclencheur en cours sur phpMyAdmin ou avec la déclaration suivante: DROP TRIGGER AddToInventory; pour exécuter avec succès cette déclaration CREATE TRIGGER.


Le TRIGGER ajouter avec succès une nouvelle ligne à la table tblprowareinventory avec le NEW.ItemID, mais vous avez défini une PRIMARY KEY sur la inventoryID de la table tblprowareinventory. C'est OK, mais après avoir essayé INSERT une deuxième rangée sur la table tblprowareinventory, vous devriez obtenir une erreur:

#1062 - Duplicate entry '0' for key 'PRIMARY'

Les TRIGGER essaie de INSERT une deuxième rangée sur tblprowareinventory table avec 0 sur la colonne inventoryID. Ceci n'est pas possible car 0 ne peut exister qu'une seule fois sur la colonne inventoryID.

Vous pouvez résoudre ce problème en utilisant un AUTO_INCREMENT sur la trop colonne inventoryID:

ALTER TABLE `tblprowareinventory` MODIFY `inventoryID` INT(11) NOT NULL AUTO_INCREMENT; 

Pour INSERT une nouvelle ligne sur tblprowareproducts tableau I utilisé la déclaration suivante:

INSERT INTO `tblprowareproducts` (`ItemID`, `ItemCode`, `itemDescription`, `Strand`, `UnitCost`, `SaleCost`, `CategoryID_fk`) 
    VALUES (NULL, '111', '111', '111', '1', '1', '1') 
+0

cela a fonctionné, mais l'id a été mis à 0 – Alpha

+0

'ItemID' est auto-incrément ou défini par l'utilisateur? –

+0

il est mis à incrément automatique – Alpha