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