Триггер, чтобы пропустить определенные вставки во время загрузки данных INFILE - PullRequest
0 голосов
/ 25 мая 2010

Прежде всего, упрощенная версия: мне интересно, могу ли я создать триггер для активации во время INSERT (это на самом деле LOAD DATA INFILE) и НЕ вводить записи для RMA уже в моей таблице?

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

RMA     Op     Days
---------------------
213   Repair   0.10
213    Test    0.20
213   Repair   0.10

Так что я мог бы сделать индекс по трем столбцам вместе, но, как вы видите, RMA может быть в шаге в течение одного и того же промежутка времени дважды, так что возможно иметь дубликаты записей. По сути, я хочу, чтобы Trigger сказал, что NEW.rma уже есть в таблице, перейдите к следующей строке.

Я обнаружил, что есть способы заставить триггер остановить вставку, поэтому я думаю, что мой вопрос сейчас таков: как я могу пропустить вставку и продолжить с остальными во время вызова LOAD DATA INFILE?

Ответы [ 3 ]

1 голос
/ 04 января 2011

нет необходимости использовать таблицы блокировок ... сделайте это так (я говорю, что имя таблицы rmainfo):

create table rmainfo_new like rmainfo;
load data infile 'filename' into table rmainfo_new;
rename table rmainfo to rmainfo_old,rmainfo_new to rmainfo;
drop table rmainfo_old;

вы также можете поместить таблицу удаления в начало (сделайте ее DROP TABLE IF EXISTS rmainfo_old), которая будет оставлять таблицу _old между запусками для резервного копирования / ссылки

0 голосов
/ 22 июля 2010

Самым простым способом, который я могу придумать, является загрузка в новую таблицу, затем удаление старой и переименование новой. LOCK TABLES должен быть в состоянии изолировать этот переключатель в конце.

В качестве альтернативы, если вы уверены в порядке, в котором строки появляются в файле вставки, т. Е. Гарантируется, что в файле есть старые строки, за которыми следуют новые строки, то сначала вы можете COUNT(*), а затем пропустить. это количество строк при загрузке.

0 голосов
/ 25 мая 2010

Не могли бы вы установить составной ключ, полученный из RMA и OP? Это приведет к тому, что повторяющиеся записи будут отображаться как ошибки.

...