MySQL的触发器插入后插入到另一个表

问题描述:

我想添加一个外键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

您可以使用以下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