2009-07-16 15 views
16

पर DATETIME फ़ील्ड में सेट करें मेरे पास 'बनाया_डेट' डेटाटाइम फ़ील्ड है जिसे मैं सम्मिलित करने पर वर्तमान दिनांक के साथ पॉप्युलेट करना चाहता हूं। इसके लिए ट्रिगर के लिए मुझे किस वाक्यविन्यास का उपयोग करना चाहिए? यह मेरे पास अभी तक है लेकिन यह गलत है।MySQL वर्तमान दिनांक दिनांक को

CREATE TRIGGER set_created_date 
BEFORE INSERT ON product 
FOR EACH ROW BEGIN 
SET NEW.created_date = now(); 

उत्तर

16

आपकी सबसे अच्छी शर्त उस कॉलम को टाइमस्टैम्प में बदलना है। MySQL स्वचालित रूप से 'अंतिम संशोधित' मान के रूप में पंक्ति में पहले टाइमस्टैम्प का उपयोग करेगा और इसे आपके लिए अपडेट करेगा। यह कॉन्फ़िगर करने योग्य है यदि आप केवल सृजन समय को सहेजना चाहते हैं।

दस्तावेज़ नहीं देख http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

+0

वर्क्स, धन्यवाद :) – William

+1

के नवीनतम संस्करण mysql एकाधिक टाइम-स्टैंप का समर्थन नहीं करता है, इसलिए हमारे पास एक टाइमस्टैम्प और एकाधिक ट्रिगर्स हो सकते हैं। –

22
DELIMITER ;; 
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW 
BEGIN 
    SET NEW.created_date = NOW(); 
END;; 
DELIMITER ; 
+1

क्या मैं इस के साथ एक और कार्य जोड़ सकता हूं >> "सेट NEW.last_visited = अब();" ? मैंने किया लेकिन त्रुटियां हुईं। धन्यवाद। @pevik –

3

अब का उपयोग करना() एक अच्छा विचार नहीं है। यह केवल वर्तमान समय और तारीख को बचाता है। जब आप अपना डेटा अपडेट करते हैं तो यह वर्तमान दिनांक और समय अपडेट नहीं करेगा। यदि आप एक बार समय जोड़ना चाहते हैं, तो डिफ़ॉल्ट मान = अब() सबसे अच्छा विकल्प है। यदि आप टाइमस्टैम्प का उपयोग करना चाहते हैं। और प्रत्येक बार उस पंक्ति को अद्यतन होने पर, इस मान को अपडेट करना चाहते हैं। फिर, ट्रिगर का उपयोग करने के लिए सबसे अच्छा विकल्प है।

  1. http://www.mysqltutorial.org/sql-triggers.aspx
  2. http://www.tutorialspoint.com/plsql/plsql_triggers.htm

इन दो toturial ट्रिगर को लागू करने में मदद मिलेगी।

11

MySQL 5.6.X के बाद से आप यह कर सकते हैं:

ALTER TABLE `schema`.`users` 
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ; 

उस स्थिति में आपके स्तंभ वर्तमान टाइमस्टैम्प जब एक नई पंक्ति सम्मिलित किया जाता है, या अद्यतन के साथ अद्यतन किया जाएगा।

आप MySQL Workbench उपयोग कर रहे हैं, तो आप सिर्फ CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP डिफ़ॉल्ट मान क्षेत्र में रख सकते हैं, तो जैसे: पूरी तरह से

enter image description here

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html

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