如何删除Mysql中的空行?

时间:2011-01-08 09:54:38

标签: mysql sql phpmyadmin sql-delete delete-row

我有一个包含超过100000个数据元素的表,但其中有近350个空白行。如何使用phpmyadmin删除此空白行?手动删除是一项繁琐的工作。

5 个答案:

答案 0 :(得分:29)

一般答案是:

DELETE FROM table_name WHERE some_column = '';

DELETE FROM table_name WHERE some_column IS NULL;

请参阅:http://dev.mysql.com/doc/refman/5.0/en/delete.html

发布表格时的更多信息!〜

另外,请务必:

SELECT * FROM table_name WHERE some_column = '';
删除之前

,这样您就可以看到要删除的行!我想在phpMyAdmin你甚至可以选择然后“全选”并删除,但我不确定。这将非常快,而且非常安全。

答案 1 :(得分:4)

我在Windows中的命令提示符下执行mysql操作。和基本的查询:

delete * from table_name where column=''

delete * from table_name where column='NULL'

不起作用。我不知道它是否在phpmyadmin sqlcommand构建器中有效。无论如何:

delete * from table_name where column is NULL 

工作正常。

答案 2 :(得分:3)

我有一个PHP脚本,可以根据列数据类型自动删除空行。

这允许我为不同的列类型定义“空虚”。

e.g。

table
first_name (varchar) | last_name (varchar) | some_qty ( int ) | other_qty (decimal)

DELETE FROM `table` WHERE
(`first_name` IS NULL OR `first_name` = '')
AND
(`last_name` IS NULL OR `last_name` = '')
AND
(`some_qty` IS NULL OR `some_qty` = 0)
AND
(`other_qty` IS NULL OR `other_qty` = 0)

由于“0”值在我的系统中毫无意义,因此我将它们视为空。但是我发现如果你这样做(first_name = 0)那么你总会得到真的,因为MySQL中的字符串总是== 0。所以我将“空”的定义定制为数据类型。

答案 3 :(得分:2)

此过程将删除所有列为null的行,而忽略可能设置为ID的主列。我希望它可以帮助你。

DELIMITER //
CREATE PROCEDURE DeleteRowsAllColNull(IN tbl VARCHAR(64))
BEGIN
SET @tbl = tbl;
SET SESSION group_concat_max_len = 1000000;
SELECT CONCAT('DELETE FROM `',@tbl,'` WHERE ',(REPLACE(group_concat(concat('`',COLUMN_NAME, '` is NULL')),',',' AND ')),';') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @tbl AND COLUMN_KEY NOT LIKE 'PRI' into @delete_all;
PREPARE delete_all FROM @delete_all;
EXECUTE delete_all;
DEALLOCATE PREPARE delete_all;
END //
DELIMITER ;

执行这样的程序。

CALL DeleteRowsAllColNull('your table');

答案 4 :(得分:1)

我知道这已经得到了回答并且有一个问题,但我写了一个小功能来做这件事,并认为它可能对其他人有用。

我用一个数组调用我的函数,这样我就可以对不同的表使用相同的函数。

$tableArray=array("Address", "Email", "Phone"); //This is the column names
$this->deleteBlankLines("tableName",$tableArray);

这里是获取数组并构建删除字符串

的函数
private function deleteBlankLines($tablename,$columnArray){
    $Where="";
    foreach($columnArray as $line):
        $Where.="(`".$line."`=''||`".$line."` IS NULL) && ";
    endforeach;
    $Where = rtrim($Where, '&& ');  
    $query="DELETE FROM `{$tablename}` WHERE ".$Where;
    $stmt = $this->db->prepare($query);
    $stmt->execute();
}

您可以将此功能用于多个表格。你只需要发送一个不同的表名和数组,它就可以工作。

我的函数将同时检查整行的空列或NULL列。如果您不需要它来检查NULL,那么您可以删除该部分。