Answers:
limit
向删除查询添加
delete from orders
where id_users = 1 and id_product = 2
limit 1
所有表都应有一个主键(由一个或多个列组成),在关系数据库中没有重复的行是没有意义的。您可以使用以下方法限制删除行的数量LIMIT
:
DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1
但这仅解决了您当前的问题,您绝对应该通过定义主键来解决更大的问题。
您需要指定应删除的行数。对于您的情况(我假设您只想保留一个),可以这样进行:
DELETE FROM your_table WHERE id_users=1 AND id_product=2
LIMIT (SELECT COUNT(*)-1 FROM your_table WHERE id_users=1 AND id_product=2)
设计表的最佳方法是添加一个临时行作为自动增量并保留为主键。因此我们可以避免上述问题。
已经有删除行的答案LIMIT
。理想情况下,您的表中应该有主键。但是如果没有。
我将给出其他方式:
我看到id_users和id_product在您的示例中应该是唯一的。
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
这些将删除具有相同数据的重复行。
但是,即使仍然使用IGNORE子句,如果仍然出现错误,请尝试以下操作:
ALTER TABLE orders ENGINE MyISAM;
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
ALTER TABLE orders ENGINE InnoDB;
如果有多个行具有重复的值,那么您也可以重新创建表
RENAME TABLE `orders` TO `orders2`;
CREATE TABLE `orders`
SELECT * FROM `orders2` GROUP BY id_users, id_product;
您必须为每行添加一个自动递增的ID,然后才能按其ID删除该行。因此您的表的每一行和id_user,id_product ecc都有唯一的ID。