在mysql的表中删除100之后的所有行(不带auto_increment)

时间:2014-11-06 10:57:11

标签: mysql sql

我想删除mysql表中第100行之后的所有行。由于某种原因,此表没有任何与Auto_increment或主键的coloumn。如何删除第100行后的所有行?什么可以查询?

我认为我必须在我的表中使用auto_increment添加另一列,然后在第100行后删除然后删除此列?或者更好的建议?

当我将所有行从1个表复制到另一个表并错误地通过sql转储文件复制同一个表中的所有行时,引发了实际问题。所以,现在我要删除第100行之后的所有行。

2 个答案:

答案 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了。