Как удалить пустые строки в Mysql?

У меня есть таблица с более чем 100000 элементами данных, но внутри есть почти 350 пустых строк. Как удалить эти пустые строки с помощью phpmyadmin? Удаление вручную-утомительная задача.

5 ответов


общий ответ:

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 вы даже можете просто выбрать, а затем "выбрать все" и удалить, но я не уверен. Это будет довольно быстро, и очень безопасный.


я делаю mysql операция в командной строке в windows. И основные запросы:

delete * from table_name where column=''

и

delete * from table_name where column='NULL'

не работает. Я не знаю, работает ли он в phpmyadmin sqlcommand builder. Во всяком случае:

delete * from table_name where column is NULL 

работает нормально.


у меня есть 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) тогда вы всегда получите true, потому что строки всегда == 0 в MySQL. Поэтому я адаптирую определение "пустой" к типу данных.


эта процедура удалит любую строку для всех столбцов, которые имеют значение 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');

Я знаю, что на это уже ответили и поставили галочку, но я написал небольшую функцию для этого и подумал, что это может быть полезно другим людям.

Я вызываю свою функцию с массивом, чтобы я мог использовать ту же функцию для разных таблиц.

$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, вы можете удалить эту часть.