MySQL удалить строку, если все пусто после обновления без триггера - PullRequest
0 голосов
/ 16 мая 2018

Для определенной таблицы, если поле обновлено до Null и все поля для этой строки теперь Null, я хочу удалить эту строку.Я понимаю, что это можно сделать с помощью триггера, но я слышал, что по возможности следует избегать триггеров.Есть ли другое решение, которое позволяет избежать триггеров и имеет более низкую стоимость?Насколько дорогим был бы даже триггер в этом случае (это дешевле, чем выполнение двух запросов?)

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Триггеры не следует избегать везде, где это возможно.Их следует использовать по своему усмотрению.

Во-первых, во многих системах, с которыми я работал, все операции DML встроены в хранимые процедуры.По сути, все, что может сделать триггер, - это хранимая процедура - наряду с другими функциями, такими как ведение журнала.

Во-вторых, если у вас есть проблема, требующая триггера, используйте триггер.Например, до Oracle 12C вам требовался триггер для добавления первичного ключа с автоинкрементом.Обязательно делайте это, если это то, что вам нужно.

Не переусердствуйте.Но ваша конкретная проблема выглядит как пример, где триггер может быть весьма полезным.

Поймите, что могут быть и другие решения.Например, возможно, представление будет делать то, что вы хотите:

create view v_t as
    select t.*
    from t
    where col1 is not null or col2 is not null or . . .;

Это сохранит все накладные расходы триггера.Если таблица становится слишком большой, вы можете удалить все строки NULL, используя запланированное задание.

0 голосов
/ 16 мая 2018

У вас есть три варианта:

  1. Вставить УДАЛИТЬ ИЗ ТАБЛИЦЫ, ГДЕ ПОЛЕ == NULL после каждого обновления.

  2. Использовать триггер

  3. Централизуйте все обновления с помощью хранимой процедуры, чтобы вы могли вызывать SP при обновлении записи, который затем может вызвать команду DELETE FROM в # 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...