powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на изменение данных в таблице после INSERT в другой таблице
3 сообщений из 3, страница 1 из 1
Создание триггера на изменение данных в таблице после INSERT в другой таблице
    #40020359
devil_cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, только начал пытаться осваивать 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
Создание триггера на изменение данных в таблице после INSERT в другой таблице
    #40020391
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Создание триггера на изменение данных в таблице после INSERT в другой таблице
    #40020397
devil_cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, большое спасибо вам за объяснение. Буду изучать дальше
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на изменение данных в таблице после INSERT в другой таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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