powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер нужно написать первый раз это делаю(
14 сообщений из 14, страница 1 из 1
Триггер нужно написать первый раз это делаю(
    #40006398
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте ! Мне нужно написать триггер, запрещающий добавлять записи в таблицу , если в ссылочной нет соответствующего значения . Т.е. у меня есть таблица countries там есть поле partoftheworld, она связана с таблицей partoftheworld, где есть как раз значения.
Я вот не могу поеять, как сделать сравнение соответсвия и как сделать запрет(
Не судите строго, пишу триггер первый раз
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006405
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urcaserem,

А триггер зачем?
Это делается внешним ключом.
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006407
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Вообще да, я поставила внешний ключ) но задача стоит научиться так делать, видимо(т.е. писать триггеры)
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006409
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Urcaserem
miksoft,

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


погуглите примеры, там все довольно хорошо рассказывают.

Например, Модератор: ссылка удалена
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006410
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006429
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сюда тоже надо заглянуть https://dev.mysql.com/doc/refman/8.0/en/signal.html
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006442
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urcaserem
как сделать сравнение соответсвия

Тупо запрос в референсную таблицу на получение количества записей со вставляемым значением.

Если одна - всё в порядке.

Если ноль - нет соответствующей записи, и тогда надо сгенерировать ошибку (SIGNAL), которая обломает процесс вставки.

Если более одного (что странно, ибо референсное поле просто обязано быть уникальным) - то имеет место логическое повреждение информации, нужно опять-таки обломать вставку, но с другим кодом и сообщением об ошибке.
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006679
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,Alex_Ustinov,Akina
знаете в чём прикол? я не понимаю точно что такое ссылочная таблица
вроде как это таблица на которую ссылается поля другой таблицы. типа в аксессе можно сделать так , чтобы в поле было падающее меню из значений столбца какой-либо другой таблицы(мастер подстановок). и там между таблицами появлялась простая ниточка без единичек там или знаков бесконечности. воооот
теперь вопрос : как это сделать в май скл воркбенч? ну я сделала таблицу по типу такой. я вот не поняла, нужно ли их связывать (ниточка) или нет? связью 1 ко многим
или это связь произойдёт если создашь триггер.

лично я склоняюсь ко 2 варианту...
жду оценки экспертов..
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006690
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, оооо, круто. типа такого?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
delimiter \\
create trigger first_trig before insert on countries 
for each row
begin
declare kol smallint default 0;
 select count(*) into kol from partoftheworld where inserted = name;
end\\
delimiter ;
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006691
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, третий вариант не буду рассматривать у меня уникальные значения.
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006721
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urcaserem
Akina, оооо, круто. типа такого?
Ну скажем так - очень типа... на самом деле типа
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TRIGGER ...
BEGIN
IF NOT EXISTS (SELECT ...) THEN
    SIGNAL ... ;
END IF;
END
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006751
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
блинский блин, туплю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
delimiter \\
create trigger first_trig before insert on countries 
for each row
begin
if not exists (select name from partoftheworld where name = inserted ) then 
 signal sqlstate '45000' set message_text = 'нет соответствия';
end if;
end\\
delimiter ;


там ошибка(
22:34:06 insert countries (FormOfGoverment_idFormOfGoverment,name,area,establish,PartOfTheWorld) values ('6','Finland','0338.1','1917-12-06','Europ') Error Code: 1054. Unknown column 'inserted' in 'where clause' 0.046 sec
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006771
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наугад, так как ничего не знаю о полях в ваших таблицах

Код: sql
1.
... (select name from partoftheworld where name = NEW.PartOfTheWorld) ...
...
Рейтинг: 0 / 0
Триггер нужно написать первый раз это делаю(
    #40006859
Urcaserem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov, да,получилось! Спасибо большое за неравнодушие!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер нужно написать первый раз это делаю(
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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