在MySQL中插入数据时如何检查两列是否重复?

时间:2011-03-27 05:51:43

标签: mysql

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;

如果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结果决定INSERT新记录或UPDATE!

3 个答案:

答案 0 :(得分:2)

您还可以创建存储过程并检查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?我觉得这里没必要吗?

答案 1 :(得分:0)

我认为重复检查是违反任何唯一索引以及主键。至少根据manual page

答案 2 :(得分:0)

一个建议,如果你有自动增量的主要ID(auto_id),那么为什么不将这两列作为主键,所以如果你试图输入一个与之匹配的值就会出错