MySQL:在通过触发器插入后将列递增1

时间:2018-06-01 00:19:10

标签: mysql sql triggers

所以这就是伙计们,

我有四张桌子。

我的第一个

CREATE TABLE IF NOT EXISTS `Users` (
`Id_User` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`Firstname` varchar(20) NOT NULL,
`Lastname` varchar(20) NOT NULL,
PRIMARY KEY (`Id_User`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1002 ;

它包含了人们的数据。

我的第二个

CREATE TABLE IF NOT EXISTS `Subject` (
`PrimaryKey_Subject` varchar(4) NOT NULL,
`Subject_Name`  int(5) NOT NULL,
PRIMARY KEY (`PrimaryKey_Subject`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它包含主题名称:数学,科学,生物学等...

我的第三个

CREATE TABLE IF NOT EXISTS `Register` (
`ForeignKey_User` smallint(5) unsigned NOT NULL,
`ForeignKey_Lesson` varchar(4) NOT NULL,
 PRIMARY KEY (`ForeignKey_User`,`ForeignKey_Lesson`),
 KEY `ForeignKey_User_I` (`ForeignKey_User`),
 KEY `ForeignKey_Lesson` (`ForeignKey_Lesson`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这个允许用户注册课程。

我的第四个

CREATE TABLE IF NOT EXISTS `Subject_Annex` (
`PrimaryKey_Subject` varchar(4) NOT NULL,
`Number_Registered`  int(5) NOT NULL,
PRIMARY KEY (`PrimaryKey_Subject`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

就是这样,

每次有人注册课程时,如何设置一个增加 Number_Registered 的触发器?

例如

我创建了一个用户:John Doe - > 用户表

  • 然后,我有主题表,其中包含所有课程:数学,科学,生物学等...

我现在可以通过注册表注册我的新创建的用户到一个主题:让我们说科学

然后现在我们有 Subject_Annex表,通过触发器,并且一旦我的用户(John Doe)链接到一个主题,(科学),应该能够显示从(这里是科学)注册到主题的用户数量,并且还增加1他们的每次有人注册此主题时的号码。

所以简而言之

如何设置一个触发器,每当有人注册某个主题时,该触发器会增加注册的用户数量?

例如

  • 主要科目:科学
  • 注册人数:1

(其他人注册)

  • 主要科目:科学
  • 注册人数:2

(其他人注册)

  • 主要科目:科学
  • 已注册人数:2

  • 主要主题:数学

  • 注册人数:1

等等...

1 个答案:

答案 0 :(得分:-1)

我设法自己解决了这个问题

DELIMITER |
create trigger before_insert_subject_annexe
before INSERT
on Register
for each row
BEGIN
INSERT INTO Subject_Annex (PrimaryKey_Subject, Number_Registered)
VALUES (NEW.ForeignKey_Lesson,  + 1)
ON DUPLICATE KEY UPDATE
  Number_Registered=Number_Registered+1;
END;
DELIMITER |

然后在我的Subjet_Annex表

CREATE TABLE IF NOT EXISTS `Subject_Annex` (
`PrimaryKey_Subject` varchar(4) NOT NULL,
`Number_Registered`  int(5) NOT NULL,
PRIMARY KEY (`PrimaryKey_Subject`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我在 Number_Registered

上添加了一个唯一键