【问题标题】:SQL triggers - how to get auto incremented value from inserted data of one table, inserted into another?SQL触发器 - 如何从一个表的插入数据中获取自动递增值,插入另一个表?
【发布时间】:2021-07-16 20:21:20
【问题描述】:

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

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, 0, 0, 0)

但是,marketplace 表中的 listingID 是自动递增的,并且我使用的插入语句会忽略该列。因此,我的触发器没有从市场表中收集自动递增的值,而是每次都插入 0。

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

表格:

--
-- 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,
  `listingName` tinytext 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;

【问题讨论】:

  • 你没有展示触发因素,这使得它真的、真的、真的很难说什么。
  • @GordonLinoff 抱歉,我以为我一开始说的很清楚,我将编辑代码以包含完整的声明。

标签: sql triggers auto-increment


【解决方案1】:

如果您想要自动生成的列,请使用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, 0, 0, 0);
END;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多