2011-01-31 12 views
56

मैं एक टेबल दो TIMESTAMP कॉलम के साथ रखना चाहता हूं। जब रिकॉर्ड बनाया गया था तब ट्रैक करने के लिए एक कॉलम और दूसरा इसे संशोधित करने के ट्रैक रखने के लिए ट्रैक करता था। मैं चाहता हूं कि ये मान डेटाबेस द्वारा संभाले जाएं। मैं नहीं चाहता कि मेरी ऐप परत को इसके बारे में सोचना पड़े।एकाधिक टाइमस्टैम्प कॉलम के साथ एक MySQL तालिका

मुझे पता है कि आप किसी अन्य TIMESTAMP स्तंभ नहीं हो सकता है अगर आप एक DEFAULT CURRENT_TIMESTAMP या एक ON UPDATE CURRENT_TIMESTAMP के साथ एक TIMESTAMP स्तंभ है। आप DATETIME का उपयोग कर सकते हैं लेकिन इसे डिफ़ॉल्ट करने का कोई तरीका नहीं है, जिसे मैं ट्रिगर के बाहर जानता हूं।

मैं DEFAULT या ON UPDATE बिना प्रत्येक छोड़ने और NULL डालने जब रिकॉर्ड बनाया जाता है, प्रत्येक वर्तमान टाइमस्टैम्प है जिसके कारण यह है कि आप can have multiple TIMESTAMP columns पाया। उस बिंदु से पहले कॉलम पर स्वचालित रूप से अपडेट हो जाएगा।

यह शानदार रूप से काम करता है लेकिन यह मुझे एक अजीब लग रहा है। यह एक बग हो सकता है और इसे किसी भी समय पैच किया जा सकता है। अगर ऐसा काम करने वाला तरीका है तो ऐसा ही हो। मैं अपने रास्ते पर खुशी से जाऊंगा। क्या कोई मुझे बता सकता है कि ऐसा करने का यह सबसे अच्छा तरीका है या क्या मुझे ट्रिगर्स का उपयोग करना चाहिए?

उत्तर

36

यह MySQL डॉक्स में दस्तावेज़ीकरण किया गया है:

इसके अलावा, आप प्रारंभ या, यह एक शून्य मूल्य बताए द्वारा वर्तमान दिनांक और समय के लिए किसी भी TIMESTAMP स्तंभ को अद्यतन जब तक यह किया गया है सकते हैं परिभाषित कुल मूल्यों को अनुमति देने के लिए पूर्ण विशेषता के साथ।

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

+13

MySQL 5.6.5 के साथ एकाधिक टाइमस्टैम्प को स्वतंत्र रूप से एक तालिका में नियंत्रित किया जा सकता है, इसलिए इसके लिए नियम बदल गए हैं। – TJChambers

29

MySQL 5.6.1 से पहले के संस्करणों दो TIMESTAMP कॉलम में एक ही तालिका में, जब तक के रूप में आप ठीक ही बाहर चूक के साथ और बातिल की इजाजत दी विख्यात नहीं जाने देंगे।

MySQL 5.6। + एक तालिका में दो या दो से अधिक TIMESTAMP कॉलम की अनुमति देता है।

अधिक यहाँ: http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html

3

MySQL एक से अधिक TIMESTAMP कॉलम में एक ही तालिका में, इस उदाहरण की जाँच अनुमति देते हैं:

CREATE TABLE t1 ( ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t3 ( ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

ध्यान दें कि TS1 TIMESTAMP स्तंभ मान 0 के साथ डिफ़ॉल्ट है, और ts2 TIMESTAMP कॉलम CURRENT_TIMESTAMP मान के साथ DEFAULT है। अधिक जानकारी यहां http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

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