Есть ли Postgres TRIGGER
? S транзакционный по умолчанию вроде (я читал) в MySQL?Значение предельного поля со значением из другой таблицы перед записью
Я создал TRIGGER
procedure, который использует простой IF
ограничить значение столбца со значением другого TABLE
с последующим UPDATE
, если лимит нарушен.
Я бы предпочел, чтобы быть в одном TRANSACTION
, но если я оберните IF
... THEN UPDATE
с BEGIN
... COMMIT
, он дает ошибку
SQL error:
ERROR: syntax error at or near ";"
LINE 2: BEGIN;
^
ли TRIGGER
сек TRANSACTION
аль по умолчанию ? Если нет, как можно сделать TRIGGER
TRANSACTION
al?
код
Это ON INSERT OR UPDATE
из articles
:
BEGIN
BEGIN; /* this first TRANSACTION line causes error */
IF (NEW.votes_used > (SELECT votes_available FROM vote_totals
WHERE vote_totals.user_id = NEW.user_id)) THEN
UPDATE articles SET votes_used = (SELECT votes_available FROM vote_totals
WHERE vote_totals.userID = NEW.user_id) WHERE user_id = NEW.user_id;
END IF;
COMMIT; /*last TRANSACTION line */
RETURN NULL;
END;
Я бы много, а делать CHECK
или FOREIGN
, чтобы пресечь это в зародыше, прежде чем данные даже получает, но я дон Не знаю, как это сделать с FOREIGN
, и я читал, что CHECK
s не может использовать подзапросы. Кажется, я читал, что это путь, но я должен сообщить, что я дБ noob.
Триггер работает в любой транзакции событие стрельбы было. Таким образом, любое изменение триггера будет отменено или передано с внешним откатом или фиксацией. Но триггер - это плохой выбор, когда вы хотите ограничить значение столбца. Почему бы не использовать ограничение внешнего ключа или контрольное ограничение –
@a_horse_with_no_name Я попытался выполнить 'CHECK', но подзапросы не разрешены. как я могу сделать это с помощью «FOREIGN», если значения из другой таблицы являются переменными и связаны другим столбцом? будет редактировать, чтобы показать ... ty! –
Извините, что информации недостаточно, чтобы дать вам ответ. На самом деле сам вопрос кажется довольно сомнительным. –