Триггер, чтобы беззвучно игнорировать / удалять дублирующиеся записи на INSERT - PullRequest
3 голосов
/ 21 ноября 2011

У меня есть следующая таблица: T (идентификатор первичного ключа, A, B)

Я хочу, чтобы пара (A, B) была уникальной, но я не хочу, чтобы ограничение было уникальным (A, B) на них, потому что это даст ошибку при вставке.Вместо этого я хочу, чтобы MySQL беззвучно игнорировал такие вставки.

Я не могу использовать «вставку при игнорировании дубликатов ключей», потому что не могу контролировать запросы клиента.

Итак, могу ли я создать такой триггер?Или, может быть, есть какое-то ограничение, позволяющее игнорировать без вывода сообщений?

Редактировать: Я копался и думаю, что хочу что-то вроде оператора SQLite "Raise Ignore" .

Ответы [ 2 ]

7 голосов
/ 21 ноября 2011

До MySQL 5.5. было невозможно остановить вставку внутри триггера. Там, где какие-то уродливые обходные пути, но я ничего не рекомендую. С версии 5.5 вы можете использовать SIGNAL , чтобы сделать это.

delimiter //
drop trigger if exists aborting_trigger //
create trigger aborting_trigger before insert on t
for each row
begin
  set @found := false;
  select true into @found from t where a=new.a and b=new.b;

  if @found then
    signal sqlstate '45000' set message_text = 'duplicate insert';
    end if;
  end   //

delimiter ;
3 голосов
/ 21 ноября 2011

Добавьте уникальный ключ (A, B) и используйте инструкцию INSERT с ключевым словом IGNORE.

Из ссылки - Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT, обрабатываются как предупреждения .

ВСТАВИТЬ Синтаксис .

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