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!
答案 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),那么为什么不将这两列作为主键,所以如果你试图输入一个与之匹配的值就会出错