2009-11-23 18 views
6

मैं एक डेटाबेस तालिका से डेटा को हटाने के लिएडेटाबेस से कैसे हटाएं?

  • इसे हमेशा के लिए
  • उपयोग isActive की तरह एक झंडा हटा दो तरीके के बारे में पता/isDeleted

अब isActive साथ समस्या यह है कि मैं ट्रैक करने के लिए है कि है मेरे एसक्यूएल प्रश्नों में हर जगह यह है कि रिकॉर्ड सक्रिय है या नहीं। DELETE का उपयोग करना हमेशा डेटा से छुटकारा पाता है।

इस डेटा का बैकअप लेने का सबसे अच्छा तरीका क्या होगा?

मान लीजिए कि मेरे पास डेटाबेस में एकाधिक टेबल हैं, क्या मेरे पास एक सामान्य कार्य होना चाहिए जो सबकुछ बैक करता है और इसे किसी अन्य तालिका में संग्रहीत करता है (संभवतः एक्सएमएल में?) या कोई अन्य तरीका है।

मैं MySQL का उपयोग कर रहा हूं लेकिन अन्य डीबी में भी उपयोग की जाने वाली तकनीकों के बारे में उत्सुक हूं।

+2

लोग आपको कोड स्निपेट देने के लिए काफी अच्छे हो सकते हैं यदि आप हमें बताते हैं कि आप किस डीबी सॉफ्टवेयर का उपयोग कर रहे हैं :) – tloach

+0

MySQL का उपयोग करना। क्या सब कुछ नहीं है? : पी – Abhinav

उत्तर

13

तालिका को उस दृश्य के साथ बदलें जो निष्क्रिय वस्तुओं को छुपाता है।

या DELETE पर एक ट्रिगर लिखें जो पंक्ति को एक संग्रह तालिका में बैक अप लेता है।

0

आप DELETED स्तंभ पर स्थित अपनी तालिकाओं विभाजन और विचारों जो हालत को शामिल किया जाएगा परिभाषित कर सकते हैं:

… AND deleted = 0 

यह सक्रिय डेटा बस के रूप में सरल और कुशल पर क्वेरी कर देगा।

+0

अभिनव पंक्तियों को हटाना चाहता है ... ताकि क्षैतिज विभाजन होने की आवश्यकता हो। – reinierpost

+0

विचारों का विभाजन और उपयोग ('SQL सर्वर' और' ओरेकल' में) प्रश्नों को ठीक तरह से कार्य करेगा जैसे पंक्तियों को पंक्तियों से भौतिक रूप से हटा दिया गया था। और हटाए गए (या समेकित) डेटा के साथ काम करने के लिए आप हमेशा टेबल के खिलाफ सीधे कम सरल प्रश्न लिख सकते हैं। – Quassnoi

2

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

0

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

+1

SQL सर्वर एक ट्रिगर सुविधा वाला एकमात्र डेटाबेस नहीं है, लेकिन यह जानने में मदद करेगा कि अभिनव आरडीबीएमएस का उपयोग कर रहा है जो ट्रिगर्स का समर्थन करता है। अन्य मैं सोच सकता हूं कि MySQL, ओरेकल, प्रगति ओपन एज, और शायद अन्य हैं। – ssakl

+0

मेरे पास MySQL 4.1.25 है। क्या यह वहां काम करेगा? – Abhinav

+0

यदि उस संस्करण में ट्रिगर हैं, तो हाँ, यह चाहिए। मुझे खेद है, मैं एसक्यूएल सर्वर का उपयोग करता हूं, इसलिए मुझे आपके द्वारा उपयोग किए जा रहे संस्करण के बारे में निश्चित नहीं है। –

2

आप एक हटाए गए कॉलम का उपयोग कर सकते हैं और एक दृश्य को परिभाषित कर सकते हैं जो सिवाय इसके कि सभी कॉलम का चयन करता है, हटाया गया है = गलत। फिर अपने सभी stps केवल दृश्य के साथ काम करते हैं। उदाहरण के लिए उपयोगकर्ता -

1

आप एक इतिहास तालिका, जहाँ आप वापस ऊपर रिकॉर्ड और समय स्टाम्प

1

नहीं डेटा हटाना है कि यह एक संबंध के लिए आवश्यक हो सकता है है के लिए सबसे बड़ी कारणों में से एक बनाए रख सकता डेटाबेस से पुराने ग्राहक को हटाने का निर्णय ले सकता है, लेकिन आपको अभी भी ग्राहक रिकॉर्ड की आवश्यकता है क्योंकि इसे पुराने चालानों द्वारा संदर्भित किया जाता है (जो कि अधिक लंबा जीवनकाल हो सकता है)।

इस आधार पर सबसे अच्छा समाधान प्रायः कॉलम का "IsDeleted" प्रकार होता है, जो एक दृश्य के साथ संयुक्त होता है (Quassnoi ने विभाजन का उल्लेख किया है, जो कई अदृश्य डेटा के कारण पॉप अप करने वाले प्रदर्शन समस्याओं के साथ मदद कर सकता है)।

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