Как проверить, являются ли столбцы буксировки дублирующимися при вставке данных в MySQL? - PullRequest
0 голосов
/ 27 марта 2011

Существует способ, которым MySQL для проверки записи, которая идет на INSERT, является дубликатом или не использует:

INSERT ... ON DUPLICATE KEY UPDATE 

Но, как говорится в документе: the KEY для проверки это primary key.И в моей ситуации мне нужно проверить tow fields (columns), чтобы убедиться, что он дублируется или нет. Моя структура таблицы:

auto_id  user_id  file_id file_status
1        1        12        1
2        3        12        0
3        1        17        1
4        4        31        1
5        1        41        0
6        4        31        0
7        1        18        1
8        5        11        0
9        1        10        0

Например: Может быть, как:

ON DUPLICATE user_id,file_id UPDATE file_status = 0;

if user_id and file_id which in one record were duplicate, я буду update file_status to 0.

Большое спасибо !!

[обновление]

Итак, у меня естьчтобы сделать это в несколько шагов!?

Во-первых, выясните, существуют ли записи или нет:

SELECT auto_id FROM MyTable WHERE user_id='user_id' AND file_id='file_id'.

Во-вторых, решите ВСТАВИТЬ новую запись или ОБНОВИТЬ в соответствии с результатом SELECT!

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Вы также можете создать хранимую процедуру и проверить, существует ли уже file_id:

drop if procedure exists check_user_files;
create procedure check_user_files
(
    in p_file_id smallint
)
begin
    declare v_success tinyint unsigned default 0;

    if not exists (select 1 from user_files where file_id = p_file_id) then

        [....] -- insert statement

    else

        [....] -- remove or update

    end if;

    select v_success as success;
end;

А где вы используете auto_id для? Я думаю, что здесь нет необходимости?

0 голосов
/ 27 марта 2011

Предложение: если у вас есть основной идентификатор (auto_id) при автоприращении, тогда почему бы не сделать эти два столбца первичным ключом, поэтому, если вы попытаетесь ввести значение, соответствующее ему, произойдет ошибка

0 голосов
/ 27 марта 2011

Я считаю, что проверка на наличие дубликатов связана с нарушением любого уникального индекса и первичного ключа.По крайней мере, согласно справочной странице .

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