2010-06-09 11 views
6

मुझे अपने mysql डेटाबेस में उपयोगकर्ता द्वारा बनाई गई दिनांक और समय को ट्रैक करने की आवश्यकता है। मेरे पास 'बनाया गया' नामक कॉलम है और डेटा प्रकार TIMESTAMP के रूप में है।php mysql timestamp

समस्या यह है कि जब कोई उपयोगकर्ता अपना पासवर्ड या अन्य जानकारी बदलता है तो TIMESTAMP मान बदलता है। मैं इसे बदलने के लिए कैसे सेट कर सकता हूं ????

उत्तर

5

आप बस CURRENT_TIMESTAMP को उसके डिफ़ॉल्ट खंड सेट कर सकते हैं (जैसा कि @Mark और @dcp अन्य उत्तर में बताया गया है):

CREATE TABLE your_table (
    ... 
    `created_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
); 

टेस्ट मामला:

CREATE TABLE tb (`a` int, `c` TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 
Query OK, 0 rows affected (0.04 sec) 

INSERT INTO tb (a) VALUES (1); 
Query OK, 1 row affected (0.01 sec) 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 1 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

UPDATE tb SET a = 5; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 5 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

संपादित करें:

मेरे मूल उत्तर में मैंने DATETIME कॉलम का उपयोग DEFAULT क्लॉज CURRENT_TIMESTAMP पर सेट करने का सुझाव दिया है। हालांकि इस तभी संभव है जब, TIMESTAMP डेटा प्रकार का उपयोग कर के रूप में stated in documentation:

एक डेटा प्रकार विनिर्देश में DEFAULT मूल्य खंड एक स्तंभ के लिए कोई डिफ़ॉल्ट मान इंगित करता है। एक अपवाद के साथ, डिफ़ॉल्ट मान स्थिर होना चाहिए; यह एक समारोह या अभिव्यक्ति नहीं हो सकता है। इसका मतलब है, उदाहरण के लिए, कि आप किसी दिनांक कॉलम के लिए NOW() या CURRENT_DATE जैसे फ़ंक्शन का मान मानने के लिए डिफ़ॉल्ट सेट नहीं कर सकते हैं। अपवाद यह है कि आप को TIMESTAMP कॉलम के लिए डिफ़ॉल्ट के रूप में निर्दिष्ट कर सकते हैं।

3

डेटाटाइम कॉलम का उपयोग करें। टाइमस्टैम्प ऑटो-अपडेट्स।

+2

ज़रूरी नहीं है, आप इसे नहीं ऑटो के लिए सेट कर सकते हैं -अद्यतन करें। – dcp

+0

डिफ़ॉल्ट रूप से, टाइमस्टैम्प अपडेट नहीं होता है। – ajacian81

0

इसे डेटटाइम बनाना?

0
  • प्रारूप को छोड़ दें लेकिन पहिया डालने से date() के साथ सही ढंग से सम्मिलित स्ट्रिंग को सम्मिलित करें।
  • तब उपयोगकर्ता updating होने की आवश्यकता है जब उपयोगकर्ता अपनी जानकारी बदलता है। आप टाइमस्टैम्प स्तंभ ठीक तरह से स्थापित नहीं है है
7

ध्वनि: बाहर

चेक guide:

* 

    Auto-initialization and auto-update: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

* 

    Auto-initialization only: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

* 

    Auto-update only: 

    ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 

* 

    Neither: 

    ts TIMESTAMP DEFAULT 0 
+1

+1, मुझे इसे हराया – Serge

0

जब आप तालिका बनाने के लिए, आप पर अद्यतन छोड़ चाहिए

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

होना चाहिए

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

link

0

विशेषताओं के अंतर्गत, "अद्यतन CURRENT_TIMESTAMP पर" अक्षम करें।

3

इसे DEFAULT CURRENT_TIMESTAMP पर बदलें अन्यथा यह स्वतः सूप जाएगा।manual से:

एक CREATE TABLE बयान में पहले TIMESTAMP स्तंभ निम्न तरीकों में से किसी में घोषित किया जा सकता:

दोनों डिफ़ॉल्ट CURRENT_TIMESTAMP और पर अद्यतन CURRENT_TIMESTAMP खंड के साथ

, स्तंभ वर्तमान टाइमस्टैम्प है इसके डिफ़ॉल्ट मान के लिए, और स्वचालित रूप से अपडेट किया जाता है।

न तो डिफॉल्ट और न ही अद्यतन खंडों के साथ, यह अद्यतन CURRENT_TIMESTAMP पर DEFAULT CURRENT_TIMESTAMP जैसा ही है।

एक डिफॉल्ट CURRENT_TIMESTAMP खंड और कोई अद्यतन अद्यतन के साथ, कॉलम में इसके डिफ़ॉल्ट मान के लिए वर्तमान टाइमस्टैम्प है लेकिन स्वचालित रूप से अपडेट नहीं किया गया है।

जोर मेरा।

0

यह आपके मामले में थोड़ा गंदा है, लेकिन आप ऐसा करके अस्थायी रूप से अक्षम ऑटो अपडेट कर सकते हैं:

UPDATE woot SET password=<value_to_set>, timestamp_colum_name=timestamp_colum_name; 

(यह वहाँ मिला: http://www.xarg.org/2010/06/disable-on-update-current-timestamp-in-mysql/)