MySQL: увеличивать столбец на единицу после вставки через триггер - PullRequest
0 голосов
/ 01 июня 2018

Так вот, ребята,

У меня четыре таблицы.


Мой первый :

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 Table , который через триггер , и когда мой пользователь, (John Doe) , связан сСубъект, (Наука) , должен иметь возможность показывать количество пользователей, зарегистрированных на эту тему, (здесь Наука) , а также увеличивать на 1 их число для каждоговремя, когда кто-то регистрируется на эту тему.


Итак, чтобы сделать его коротким ,

Как я могу установить триггер, который увеличивает зарегистрированное число пользователей каждый раз, когда кто-тозарегистрироваться на предмет?


Например :

  • Первичный ключ Тема: Наука
  • Количество зарегистрированных: 1

(Кто-то еще регистрируется)

  • Первичный ключ Тема: Наука
  • Количество зарегистрированных: 2

(Кто-то регистрируется)

  • Первичный ключ Тема: Наука
  • Число зарегистрированных: 2

  • Первичный ключ Subject: Mathematic

  • Количество зарегистрированных: 1

Etc ...

1 Ответ

0 голосов
/ 02 июня 2018

Мне удалось решить проблему самостоятельно :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...