Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на изменение данных в таблице после INSERT в другой таблице / 3 сообщений из 3, страница 1 из 1
19.11.2020, 13:40
    #40020359
devil_cat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на изменение данных в таблице после INSERT в другой таблице
Здравствуйте, только начал пытаться осваивать MySQL.
Вопрос по созданию триггера. У меня есть 2 таблицы: Students (Sno char(3), Sname char(8), Scount int) и Score(Sno char(3), Cno char(5), Degree decimal(4,1)). Нужно создать триггер, чтобы при добавлении информации об оценке студента через INSERT в таблицу Score, в таблице Student в соответствующей строке студента число Scount увеличивалось на 1.
Вроде бы понятно объяснил.
Никак не могу понять как правильно написать такой триггер, после инсерта с триггером число Scount увеличивается на неверное число.
Помогите, пожалуйста
Мой триггер
Код: sql
1.
2.
3.
create trigger AddCount before insert on score 
for each row 
update student set Scount = Scount + 1 where Sno in (select Sno from score);



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table Student(
Sno char(3) not null primary key,
Sname char(8) not null,
Scount int null);
 
create table Score(
Sno Char(3) not null,
foreign key (Sno) references student(Sno) on update cascade,
Cno char(5) not null,
Degree decimal(4,1) null);
 
insert student(Sno, Sname, Scount)
values
('108', 'Tom', 40),
('105', 'John', 30),
('107', 'Mary', 23),
('101', 'Jake', 15),
('109', 'Lily', 10),
('103', 'James', 21);



И вот такой должен быть INSERT
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
insert score(Sno, Cno, Degree)
values
('103', '3-245', 86),
('105', '3-245', 75),
('109', '3-245', 68),
('103', '3-105', 92),
('105', '3-105', 88),
('109', '3-105', 76),
('101', '3-105', 64),
('107', '3-105', 91),
('107', '6-166', 79),
('108', '6-166', 81);
...
Рейтинг: 0 / 0
19.11.2020, 14:25
    #40020391
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на изменение данных в таблице после INSERT в другой таблице
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER AddCount 
AFTER INSERT 
ON score 
FOR EACH ROW 
UPDATE student 
SET Scount = Scount + 1 
WHERE Sno = NEW.Sno;


fiddle

Первая ошибка в том, что Вы делаете подзапрос в score , т.е. по всей таблице. А надо обращаться строго к значению текущей вставляемой записи, которая доступна через псевдотаблицу NEW.

Вторая ошибка - в использовании BEFORE-триггера. Если запрос на вставку не выполнится по какой-то причине, значение всё равно обновится. Надо обновлять только тогда, когда вставка уже успешно выполнена.
...
Рейтинг: 0 / 0
19.11.2020, 14:31
    #40020397
devil_cat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на изменение данных в таблице после INSERT в другой таблице
Akina, большое спасибо вам за объяснение. Буду изучать дальше
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на изменение данных в таблице после INSERT в другой таблице / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]