|
|
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, мне задали задание - сделать в одном триггере 3 ограничения (INSERT, UPDATE, DELETE) для одной таблицы. Подскажите пожалуйста как это вообще можно реализовать в mysql? Например в Microsoft SQL Server 2005 триггер с 3мя ограничениями выглядит следующим образом: create trigger trig3 on dbo.СПОРТСМЕН AFTER INSERT, UPDATE, DELETE as begin ... пробовал также в mysql, выводит ошибку: CREATE TRIGGER one BEFORE INSERT, UPDATE,DELETE ON athletes FOR EACH ROW BEGIN ... END; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 18:48:06 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
dk17Здравствуйте, мне задали задание - сделать в одном триггере 3 ограничения (INSERT, UPDATE, DELETE) для одной таблицы. Во-первых, INSERT, UPDATE и DELETE - не "ограничения", а типы события изменения набора записей таблицы. Во-вторых, один триггер обрабатывает только один тип события. Так что тот, кто дал тебе такое задание - безграмотный [censored]. Ну при условии, конечно, что ты донёс до нас задание, не исказив его смысл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 19:53:52 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
Akina, я донёс до вас смысл))) В начале учебы нам давали на выбор любой сервер для языка sql. Большинство выбрало Microsoft SQL Server 2005. Я выбрал MySQL, мне он показался более удобен) На сервере Microsoft SQL Server 2005 триггер с тремя событиями выглядит следующим образом: create trigger trig3 on dbo.СПОРТСМЕН AFTER INSERT, UPDATE, DELETE as begin set nocount on; begin if (select код_вида_спорта from inserted)<> any(select код_вида_спорта from dbo.ВИД_СПОРТА) begin rollback print 'Не существует вида спорта с данным номером' end if (select Разряд from deleted)='МСМК' begin rollback print 'Нельзя удалять мастера спорта международного класса' end if (update (дата_рождения)) begin RAISERROR ('Нельзя изменять данные о дате рождеия спортсмена, данные заносятся только при добавлении спортсмена.', 1, 11) И я не понимаю, как такое можно реализовать в mysql( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 20:10:20 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
Akina, получается, что подобное нельзя реализовать в mysql, если один триггер привязан только к одному событию (а в Microsoft SQL может привязываться к трём)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 20:13:16 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
Странный вопрос. Каждая СУБД, каждый диалект реализуют триггеры по-своему. Например, В MySQL нет триггера INSTEAD OF, а в MS SQL нет триггера BEFORE... В MySQL триггеры - строчные, в то время как в MS SQL - табличные... Различий - море, так что на MS SQL не то что кивать - про него даже вспоминать не следует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 09:25:10 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
dk17,сделать в одном триггере 3 ограничения задание заточено не под MySQL на одно событие - один триггер обработки ошибок reiseerror тоже нет можно реализовать в MS SQL Server, в PostrgeSQL 3 в одном в PostrgeSQL реализуется легко Код: sql 1. в триггере идет только вызов функции аналог reiseerror есть - Код: sql 1. 2. 3. lkz jдля обучения PostgreSQL гораздо шире чем MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 10:11:05 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
dk17Akina, я донёс до вас смысл))) В начале учебы нам давали на выбор любой сервер для языка sql. Большинство выбрало Microsoft SQL Server 2005. Я выбрал MySQL, мне он показался более удобен) На сервере Microsoft SQL Server 2005 триггер с тремя событиями выглядит следующим образом: create trigger trig3 on dbo.СПОРТСМЕН AFTER INSERT, UPDATE, DELETE as begin set nocount on; begin if (select код_вида_спорта from inserted)<> any(select код_вида_спорта from dbo.ВИД_СПОРТА) begin rollback print 'Не существует вида спорта с данным номером' end if (select Разряд from deleted)='МСМК' begin rollback print 'Нельзя удалять мастера спорта международного класса' end if (update (дата_рождения)) begin RAISERROR ('Нельзя изменять данные о дате рождеия спортсмена, данные заносятся только при добавлении спортсмена.', 1, 11) И я не понимаю, как такое можно реализовать в mysql( и что в ms sql это творение работает...я призабыл уже..но мне интуиция подсказывает, что при удалении (select код_вида_спорта from inserted) - это либо вызовет ошибку изза отсутсвия таблицы инсертид либо будет неверная логика if (select Разряд from deleted)='МСМК' ...а если удаление такое что с разными разрядами удаляються строчки... первая с не МСМК, вторая с ним... ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 15:25:08 |
|
||
|
Триггер с тремя ограничениями
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за помощь и советы! Создал три триггера для одной таблицы, но с разными событиями. С выводом (обработкой) ошибки на экран, в MySQL, разобрался. За это отвечает следующий синтаксис кода: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 15:50:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38978506&tid=1833073]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 301ms |

| 0 / 0 |
