queries MySQL में सभी तालिकाओं से सभी पंक्तियों को रिक्त कैसे करें(एसक्यूएल में)




mysql queries (4)

जो लोग phpMyAdmin के माध्यम से यह करना चाहते हैं, इस सवाल पर एक नज़र डालें:

कैसे मैं डेटाबेस को छोड़ने के बिना phpMyAdmin में मेरे डेटाबेस में सभी तालिकायों की सामग्री को हटा सकता हूँ?

मैं कुछ डीबी उपयोगिता लिपियों को लिख रहा हूँ, और जिन कार्यों में मुझे ज़रूरत है उनमें से एक केवल डेटा का पुनर्निर्माण करता है, लेकिन स्कीमा बरकरार छोड़ दें। कमान-पंक्ति से bash और mysql टूल (कोई php, आदि) का उपयोग करके इसे स्वचालित करने का सबसे आसान तरीका क्या है?

अद्यतन: मैं एक मेज पर सभी तालिकाओं को संभालने का समाधान चाहूंगा, और यदि संभव हो तो तालिकाओं को जोड़ या हटाए जाने पर अपडेट करने की आवश्यकता नहीं है।


Answer #1
TRUNCATE tableName;

यह तालिका की सामग्री को खाली करेगा।

क्यू के जवाब में संपादित करें संपादित करें: यह मेरे त्वरित परीक्षण से लगता है कि आपको कम से कम 2 प्रश्न करना होगा क्योंकि ऐसा लगता है कि "शो टेबल" का प्रयोग उप क्वेरी के रूप में नहीं किया जा सकता, मुझे नहीं पता कि यह कैसे करना है bash तो एक PHP उदाहरण है, उम्मीद है कि यह मदद मिलेगी

<?php      
mysql_connect('localhost', 'user', 'password');
$dbName = "database";
mysql_select_db($dbName); /*added semi-colon*/
$result_t = mysql_query("SHOW TABLES");
while($row = mysql_fetch_assoc($result_t))
{
   mysql_query("TRUNCATE " . $row['Tables_in_' . $dbName]);
}
?>

कम से कम यह कुछ त्रुटि हैंडलिंग की आवश्यकता है।


Answer #2

डेटाबेस की सूची से सभी तालिकाओं को कम करने के लिए यहां एक बास एक-लाइनर है:

for j in database_name1 database_name2; \
do for i in `echo 'show tables ' |mysql $j \
|grep -v 'Tables_in'`; do mysql $j -e "truncate $i"; done; done

कृपया ध्यान दें, कटौती किसी भी संकेत के बिना लक्ष्य तालिका से सभी डेटा को निकाल देगा। संभवतया "सुनिश्चित करें कि $ i" को "$ i का वर्णन करें" से पहले यह सुनिश्चित करने के लिए कि परिणाम सेट में तालिकाओं को खाली किया जाना है

एक और बात: यदि आप सभी MySQL डाटाबेसों में हर तालिका से दोबारा पुनरावृति करना चाहते हैं ( mysql और mysql को छोड़कर, मुझे उम्मीद थी!), उपरोक्त "database_name1 database_name2" के लिए निम्नलिखित विकल्प चुनें:

`echo 'show databases' | mysql | awk '$1 != "information_schema" && \
$1 != "mysql" {if (NR > 1) {print}}'`

तो, यहां एक नमूना है जो कम विनाशकारी है; यह प्रत्येक MySQL डाटाबेस में सभी तालिकाओं के लिए ऑप्टिमाइज़ करता है (ऊपर वर्णित अपवादों):

for j in `echo 'show databases' | mysql | \
awk '$1 != "information_schema" && $1 != \
"mysql" {if (NR > 1) {print}}'`; do for i in \
`echo 'show tables ' |mysql $j |grep -v \
'Tables_in'`; do mysql -e "optimize table $j.$i"; \
done; done

आवश्यक "एक्शन" को संशोधित करें और बहुत घबराहट के साथ!


Answer #3

यदि आप यूनिक्स / लिनक्स पर हैं तो आप शेल को चलाने के लिए उपयोग कर सकते हैं:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

या रेसलिकल रिलेशनल में एक ब्लॉग पोस्ट है जिसमें यह करने के लिए संग्रहीत कार्यविधि लिखना है।





mysql