SQL触发器 - 如何从一个表的插入数据中获取自动递增的值,插入到另一个表中?

问题描述

我有两个表“marketplace”和“stats”。我在插入到市场上有一个触发器,它接收这些新数据并将其插入到统计信息中,如下所示:

CREATE TRIGGER `marketplace_to_stats`
BEFORE INSERT ON `marketplace`
FOR EACH ROW
INSERT INTO
stats (stats.studentID,stats.listingID,stats.listingName,stats.date,stats.percent,stats.listingViews,stats.listingWatching,stats.listingSales) 
VALUES(NEW.studentID,NEW.listingID,NEW.listingName,curdate(),0)

但是,市场表中的列表 ID 是自动递增的,我使用的插入语句将该列排除在外。因此,我的触发器没有从市场表中收集自动递增的值,而是每次插入 0。

如何更改此触发器语句以收集并插入到 stats 表中,即在市场表上生成自动递增值?

表格:

--
-- Table structure for table `marketplace`
--

CREATE TABLE `marketplace` (
  `listingID` int(11) NOT NULL,`studentID` int(11) NOT NULL,`listingName` tinytext NOT NULL,`fileName` tinytext NOT NULL,`listingBio` varchar(1500) NOT NULL,`listingPrice` decimal(5,2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `stats`
--

CREATE TABLE `stats` (
  `studentID` int(11) NOT NULL,`listingID` int(11) NOT NULL,`date` date NOT NULL,`percent` decimal(5,2) NOT NULL,`listingViews` int(11) NOT NULL,`listingWatching` int(11) NOT NULL,`listingSales` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

解决方法

如果您想要自动生成的列,请使用 after insert 触发器:

CREATE TRIGGER `marketplace_to_stats`
AFTER INSERT ON `marketplace`
FOR EACH ROW
BEGIN
INSERT INTO stats (studentID,listingID,listingName,date,percent,listingViews,listingWatching,listingSales) 
    VALUES (NEW.studentID,NEW.listingID,NEW.listingName,curdate(),0);
END;

尽管 MySQL 允许对 insert 中的列进行限定,但我发现这是不必要的(并且与其他数据库不兼容)。