2011-01-08 27 views
5

मेरे पास 100000 से अधिक डेटा तत्वों वाला एक टेबल है, लेकिन इसमें लगभग 350 रिक्त पंक्तियां हैं। मैं phpmyadmin का उपयोग कर इस खाली पंक्तियों को कैसे हटा सकता हूं? मैन्युअल रूप से हटाना एक कठिन काम है।मैं MySQL में रिक्त पंक्तियों को कैसे हटा सकता हूं?

+0

क्या आप अपनी टेबल संरचना पोस्ट कर सकते हैं, और पूरे रिकॉर्ड को रिक्त माना जाने के लिए कौन सा क्षेत्र रिक्त होना चाहिए? –

उत्तर

24

सामान्य जवाब है:

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 में आप केवल चयन कर सकते हैं और फिर "सभी का चयन करें" और हटाएं, लेकिन मुझे यकीन नहीं है। यह बहुत तेज़ और बहुत सुरक्षित होगा।

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) करते हैं तो आप हमेशा सत्य पाएंगे, क्योंकि स्ट्रिंग हमेशा == 0 MySQL में होती है। तो मैं डेटा प्रकार के लिए "खाली" की परिभाषा तैयार करता हूं।

4

मैं विंडोज़ में कमांड प्रॉम्प्ट में mysql ऑपरेशन कर रहा हूं। और बुनियादी प्रश्नों:

delete * from table_name where column='' 

और

delete * from table_name where column='NULL' 

काम नहीं करता। मुझे नहीं पता कि यह phpmyadmin वर्गमीटर निर्माता में काम करता है या नहीं। वैसे भी:

delete * from table_name where column is NULL 

ठीक काम करता है।

1

यह प्रक्रिया उन सभी कॉलमों के लिए किसी भी पंक्ति को हटा देगी जो प्राथमिक कॉलम को अनदेखा कर रहे हैं जो आईडी के रूप में सेट की जा सकती है। मुझे उम्मीद है इससे आपको मदद मिली होगी।

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'); 
0

मैं यह पहले से ही उत्तर दिया गया है और एक टिक गया है पता है, लेकिन मैं ऐसा करने के लिए एक छोटे से समारोह को लिखा था और सोचा था कि यह अन्य लोगों के लिए उपयोगी हो सकता है।

मैं अपने फ़ंक्शन को सरणी के साथ कॉल करता हूं ताकि मैं अलग-अलग तालिकाओं के लिए एक ही फ़ंक्शन का उपयोग कर सकूं।

$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 की जांच करने की आवश्यकता नहीं है तो आप उस भाग को हटा सकते हैं।

संबंधित मुद्दे