我CREATE TRIGGER
在一个名为Item
.
我想在表中插入一个新行itemindustrycodeslookup
并取回最大值itemindustrycodeslookupId
,以便将该值插入Item
表中。
这是我到目前为止所拥有的:
-- Trigger DDL Statements
DELIMITER $$
USE `nextcart`$$
CREATE TRIGGER `insert_itemindustrycodeslookupid`
BEFORE INSERT ON `item` FOR EACH ROW
BEGIN
INSERT INTO `itemindustrycodeslookup` SET `itemindustrycodeslookupId` = NULL;
#SELECT here..
#INSERT here...
END$$
在 INSERT 之后我需要一个 SELECT,然后是另一个 INSERT 吗?
另外,我不确定INSERT INTO
itemindustrycodeslookup SET
itemindustrycodeslookupId = NULL;
.. 除了自动递增的 PK id 之外,所有列都可以为空,这就是我对SET
itemindustrycodeslookupId说的原因= NULL
**代码更新:我仍然不确定我的分隔符是否正确,我还没有准备好点击应用按钮,但它正在出现。
-- Trigger DDL Statements
DELIMITER $$
USE `nextcart`$$
CREATE TRIGGER `insert_itemindustrycodeslookupid`
AFTER INSERT ON `item` FOR EACH ROW
BEGIN
DECLARE fk_id int;
Set fk_id = LAST_INSERT_ID();
INSERT INTO `itemindustrycodeslookup` SET `itemindustrycodeslookupId` = NULL;
UPDATE `item` SET `item`.`itemindustrycodeslookupId` = LAST_INSERT_ID() WHERE `item`.`itemId` = fk_id;
END$$
***最新代码更新:这确实有效,从网络上搜集而来。海报说“使用风险自负”,所以希望有更好的解决方案。如果 MySQL 触发了触发器,那么 MySQL 不喜欢更新它自己的表,所以......无论如何,这就是 DID 的工作原理。
-- Trigger DDL Statements
DELIMITER $$
USE `nextcart`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `nextcart`.`insert_itemindustrycodeslookupid`
BEFORE INSERT ON `nextcart`.`item`
FOR EACH ROW
BEGIN
INSERT INTO nextcart.itemindustrycodeslookup SET itemindustrycodeslookupId = NULL;
SET NEW.itemindustrycodeslookupId = (
SELECT AUTO_INCREMENT - 1
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'itemindustrycodeslookup'
);
END$$
***解决方案:发现这也有效,这可能是您在下面的答案..
-- Trigger DDL Statements
DELIMITER $$
USE `nextcart`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `nextcart`.`insert_itemindustrycodeslookupid`
BEFORE INSERT ON `nextcart`.`item`
FOR EACH ROW
BEGIN
INSERT INTO nextcart.itemindustrycodeslookup SET itemindustrycodeslookupId = NULL;
SET NEW.itemindustrycodeslookupId = (
SELECT LAST_INSERT_ID());
END$$