我想删除mysql表中第100行之后的所有行。由于某种原因,此表没有任何与Auto_increment或主键的coloumn。如何删除第100行后的所有行?什么可以查询?
我认为我必须在我的表中使用auto_increment添加另一列,然后在第100行后删除然后删除此列?或者更好的建议?
当我将所有行从1个表复制到另一个表并错误地通过sql转储文件复制同一个表中的所有行时,引发了实际问题。所以,现在我要删除第100行之后的所有行。
答案 0 :(得分:1)
这将删除从第一行开始的每一行(例如:1,2,3,4,5,6,7 => 2,4,6)
DELETE FROM table_name WHERE rand() < 0.5
这会删除设置ID
后的所有行DELETE FROM table_name WHERE id > row_number
我希望这很有用
答案 1 :(得分:0)
您可以使用交换临时表。 假设您的表名是mytable;
CREATE TEMPORARY TABLE mytable_temp LIKE mytable;
INSERT INTO mytable_temp SELECT * FROM mytable LIMIT 100;
DELETE FROM mytable;
INSERT INTO mytable SELECT * FROM mytable_temp;
DROP TABLE mytable_temp;
注意:一般情况下,当重复行无序或您不知道原始行的结束位置时,您可以在(所有)交换表列上设置唯一索引并使用REPLACE代替INSERT。然后就不需要使用LIMIT了。