2017-10-04 160 views
1

我想添加一個外鍵tblprowareinventory每當我插入tblprowareproductsMySQL的觸發器插入後插入到另一個表

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)) 

,但我得到這個錯誤:

error

+0

是inventoryid一個auto_increment

您可以使用AUTO_INCREMENTinventoryID列得解決這個問題? –

+0

是的,它auto_increment – Alpha

回答

1

您可以使用以下CREATE TRIGGER聲明:

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 ; 

注:你要刪除的phpMyAdmin界面,或者與下面的語句您當前觸發:DROP TRIGGER AddToInventory;才能成功運行此CREATE TRIGGER聲明。


TRIGGER成功添加一個新行tblprowareinventory表與NEW.ItemID,但你tblprowareinventory表的inventoryID定義的PRIMARY KEY。這是確定的,而是試圖INSERT第二行上tblprowareinventory表之後,你應該得到一個錯誤:在inventoryID

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

TRIGGER試圖INSERT第二行上tblprowareinventory表0。這是不可能的,因爲在inventoryID列中0只能存在一次。

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

INSERTtblprowareproducts表我用下面的語句一個新行:

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

它的工作,但ID被設置爲0 – Alpha

+0

'ItemID'是自動增量或用戶定義? –

+0

它被設置爲自動增加 – Alpha