【问题标题】:Delete many rows from a table using id in Mysql在 Mysql 中使用 id 从表中删除许多行
【发布时间】:2013-03-08 09:28:30
【问题描述】:

我是一名 Linux 管理员,只了解 MySQL 查询的基本知识

我想使用 id 从我的表中删除许多 ip 地址的表条目,

目前我正在使用

DELETE from tablename where id=1;
DELETE from tablename where id=2;

但我必须删除 254 个条目,所以这个方法需要几个小时,我如何告诉 mysql 删除我指定的行,因为我想跳过从这 254 个条目中删除一些条目。

删除整个表并导入所需条目不是一种选择。

【问题讨论】:

  • id 是一个数字,所以类似于DELETE from tablename where id<254 and id>3; 或任何可以工作的东西。
  • 哦,每个答案都有效....

标签: mysql sql sql-delete


【解决方案1】:
DELETE FROM tablename WHERE id > 0;
OR
DELETE FROM tablename WHERE id <255;

它从 1 到 254 删除 id

【讨论】:

    【解决方案2】:

    希望对你有帮助:

    DELETE FROM tablename 
    WHERE tablename.id = ANY (SELECT id FROM tablename WHERE id = id);
    

    【讨论】:

    • 对于 10.1.37-MariaDB 我收到错误:“错误 SQL (1235):此版本的 MariaDB 尚不支持 'LIMIT & IN/ALL/ANY/一些子查询”。
    【解决方案3】:
    DELETE FROM table_name WHERE id BETWEEN 1 AND 256;
    

    试试这个。

    【讨论】:

      【解决方案4】:

      最好的方法是使用IN 声明:

      DELETE from tablename WHERE id IN (1,2,3,...,254);
      

      如果您有连续的 ID,您也可以使用 BETWEEN

      DELETE from tablename WHERE id BETWEEN 1 AND 254;
      

      您当然可以使用其他 WHERE 子句限制某些 ID:

      DELETE from tablename WHERE id BETWEEN 1 AND 254 AND id<>10;
      

      【讨论】:

      • Range(&gt;&lt;)在性能方面优于 IN,正如我们今天在应用程序中发现的那样。使用说明语句,看看IN 是如何不使用索引的。
      • 不用担心您的 DBMS 如何使用 INDEX...请参阅 stackoverflow.com/questions/586381/… 了解为什么有时使用 INDEX 会比进行全表扫描更长!
      • 感谢您的帮助
      【解决方案5】:

      如果您的数据中有一些“条件”来计算 254 个 ID,您可以使用:

      delete from tablename
      where id in 
      (select id from tablename where <your-condition>)
      

      或者简单地说:

      delete from tablename where <your-condition>
      

      在任何情况下,简单地对 id 列的 254 个值进行硬编码都是非常困难的。

      【讨论】:

      • like @tom10271 说这应该在 MySQL 中产生“你不能在 FROM 子句中指定目标表”
      【解决方案6】:

      其他人建议IN,这很好。您还可以使用范围:

      DELETE from tablename where id<254 and id>3;
      

      如果要删除的 id 是连续的。

      【讨论】:

        【解决方案7】:

        如果您只需要保留几行,请考虑

        DELETE FROM tablename WHERE id NOT IN (5,124,221);
        

        这将只保留一些记录并丢弃其他记录。

        【讨论】:

          【解决方案8】:

          使用IN 子句

             DELETE from tablename where id IN (1,2);
          

          或者您可以合并使用 BETWEENNOT IN 以减少您必须提及的数字。

          DELETE from tablename 
          where (id BETWEEN 1 AND 255) 
          AND (id NOT IN (254));
          

          【讨论】:

            【解决方案9】:

            这样的东西可能会让它更容易一些,你显然可以使用脚本来生成它,甚至是 excel

            DELETE FROM tablename WHERE id IN (
            1,
            2,
            3,
            4,
            5,
            6
            );
            

            【讨论】:

              【解决方案10】:

              IN怎么样

              DELETE FROM tableName
              WHERE ID IN (1,2) -- add as many ID as you want.
              

              【讨论】:

                猜你喜欢
                • 2019-01-06
                • 2017-08-27
                • 2017-11-30
                • 2020-02-20
                • 1970-01-01
                • 2016-10-29
                • 2021-06-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多