MySQL触发器:在插入另一个表之后插入

3

每当我插入tblprowareproducts时,我希望将外键添加到tblprowareinventory中:

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

库存ID是否为自增? - P.Salmon
是的,它会自动递增。 - Alpha
1个回答

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

注意:在成功运行此CREATE TRIGGER语句之前,您必须删除phpMyAdmin上的当前触发器或使用以下语句:DROP TRIGGER AddToInventory;


TRIGGER 成功向 tblprowareinventory 表添加了一个新行,其中包含 NEW.ItemID,但您在 tblprowareinventory 表的 inventoryID 上定义了一个 PRIMARY KEY。这没关系,但是在尝试在 tblprowareinventory 表上插入第二行后,您会收到一个错误:

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

TRIGGER 尝试在 tblprowareinventory 表上使用 0 在 inventoryID 列中插入第二行。这是不可能的,因为 0 只能存在于 inventoryID 列中一次。

您也可以在 inventoryID 列上使用 AUTO_INCREMENT 来解决此问题:

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

为了在“tblprowareproducts”表中插入一行新记录,我使用了以下语句:INSERT
INSERT INTO `tblprowareproducts` (`ItemID`, `ItemCode`, `itemDescription`, `Strand`, `UnitCost`, `SaleCost`, `CategoryID_fk`) 
    VALUES (NULL, '111', '111', '111', '1', '1', '1')

ItemID 是自增还是用户定义的? - Sebastian Brosch
它被设置为自动递增。 - Alpha
你能否编辑你的问题并添加 tblprowareinventorytblprowareproductsCREATE TABLE 语句? - Sebastian Brosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接