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

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

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

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


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

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

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

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

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

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

лично я склоняюсь ко 2 варианту...
жду оценки экспертов..
...
Рейтинг: 0 / 0
08.10.2020, 19:00
    #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
08.10.2020, 19:02
    #40006691
Urcaserem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер нужно написать первый раз это делаю(
Akina, третий вариант не буду рассматривать у меня уникальные значения.
...
Рейтинг: 0 / 0
08.10.2020, 20:36
    #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
08.10.2020, 22:39
    #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
09.10.2020, 01:48
    #40006771
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер нужно написать первый раз это делаю(
наугад, так как ничего не знаю о полях в ваших таблицах

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


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