删除后的mysql插入因“重复输入”而失败

时间:2011-07-21 14:27:41

标签: mysql sql

我有一个包含两个mysql查询的代码 DELETE FROM my_table WHERE user_id=some_number
INSERT INTO my_table (user_id, ... ) VALUES(some_number, ...)

字段user_id是唯一的。

在极少数情况下,插入失败声称发生了重复输入。我的第一直觉让我相信DELETE没有完成,现在插入尝试插入,我得到一个重复的条目。这可能吗?我怎么能避免这个?您可以想到有不同的解释吗?

更新:我删除的原因是因为我想要删除我第一次没有更新/插入的所有数据。此外,我认为重要的是要声明大多数数据保持不变。

5 个答案:

答案 0 :(得分:2)

改为使用UPDATE语句:

UPDATE my_table
SET my_column = my_value
WHERE user_id = some_number

答案 1 :(得分:2)

SET AUTOCOMMIT=0;    
START TRANSACTION;    
DELETE FROM my_table WHERE user_id=some_number;     
INSERT INTO my_table (user_id, ... ) VALUES(some_number, ...); 
commit;

答案 2 :(得分:1)

您可以在DELETE之后尝试COMMIT以确保它已完成。

答案 3 :(得分:1)

为什么DELETE然后INSERT同一user_id而不只是UPDATE行?

答案 4 :(得分:-2)

这是因为查询被视为两个单一事务,因此无法保证执行顺序。您描述的效果是因为在删除之前处理​​插入。您应该在一次交易中更改查询逻辑或执行两个查询。