问题描述
我有两个表“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
中的列进行限定,但我发现这是不必要的(并且与其他数据库不兼容)。