我有一个包含两个mysql查询的代码
DELETE FROM my_table WHERE user_id=some_number
INSERT INTO my_table (user_id, ... ) VALUES(some_number, ...)
字段user_id是唯一的。
在极少数情况下,插入失败声称发生了重复输入。我的第一直觉让我相信DELETE没有完成,现在插入尝试插入,我得到一个重复的条目。这可能吗?我怎么能避免这个?您可以想到有不同的解释吗?
更新:我删除的原因是因为我想要删除我第一次没有更新/插入的所有数据。此外,我认为重要的是要声明大多数数据保持不变。
答案 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)
这是因为查询被视为两个单一事务,因此无法保证执行顺序。您描述的效果是因为在删除之前处理插入。您应该在一次交易中更改查询逻辑或执行两个查询。