如何删除Mysql中的空白行?

Posted

技术标签:

【中文标题】如何删除Mysql中的空白行?【英文标题】:How do I delete blank rows in Mysql? 【发布时间】:2011-06-05 17:19:05 【问题描述】:

我确实有一个包含超过 100000 个数据元素的表,但其中几乎有 350 个空白行。如何使用 phpmyadmin 删除这些空白行?手动删除是一项繁琐的任务。

【问题讨论】:

您能否发布您的表结构,以及哪些字段应为空白,以使完整记录被视为空白? @StWilson 和 Thomas Williams 的回答提供了最通用的解决方案,应该被接受。 Spiny Norman:评论是相关的!问题似乎是要求“空白行”。接受的答案和 NCA 仅处理具有 1 个空白列的情况。更通用的解决方案更复杂。 STWilson 的 DB 解决方案绝对是我解决这个问题的首选! 【参考方案1】:

一般的答案是:

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 中你甚至可以选择然后“全选”并删除,但我不确定。这会非常快,而且非常安全。

【讨论】:

从问题来看,我们似乎对“空白行”感兴趣,只有当行中的一列为空白时才会删除。【参考方案2】:

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

delete * from table_name where column=''

delete * from table_name where column='NULL'

不起作用。我不知道它是否适用于phpmyadmin sqlcommand builder。无论如何:

delete * from table_name where column is NULL 

工作正常。

【讨论】:

从问题看来,我们对“空白行”感兴趣,只有当行中的一列为空白时才会删除。【参考方案3】:

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

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

例如

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。所以我为数据类型定制了“空”的定义。

【讨论】:

【参考方案4】:

此过程将删除所有为空的列的任何行,忽略可能设置为 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');

【讨论】:

【参考方案5】:

我知道这个问题已经得到回答并且打勾了,但是我为此编写了一个小函数,并认为它可能对其他人有用。

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

$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,那么您可以删除该部分。

【讨论】:

以上是关于如何删除Mysql中的空白行?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除mPdf中的空白页

如何在excel里批量删除空白行列?

如何删除excel表格下面的空白行

Python:如何删除文件中的空白行?

excel数据表格中的空白行如何清除?

如何删除圆形 UIImageView 中的空白?