मेरे पास मेरे डीबी पर एक users_settings तालिका है जिसमें मैं उपयोगकर्ता के बारे में कुछ डेटा संग्रहीत करता हूं। उस डेटा में से कुछ के लिए मुझे पिछले संशोधन का ट्रैक रखना होगा, उदाहरण के लिए:


+--------------+-------------+
| Field        | Type        |
+--------------+-------------+
| feel         | varchar(10) |
| feel_last    | timestamp   |
| other        | varchar(10) |
| other_last   | timestamp   |
+--------------+-------------+

जब मैं एक नए महसूस मान के साथ पंक्ति को अद्यतन करता हूं, तो मैं स्वचालित रूप से वर्तमान टाइमस्टैम्प लिखना चाहता हूं, क्या इसे सीधे MySQL से प्राप्त करना संभव है या मुझे अपने बैकएंड से सीधे अपडेट क्वेरी में टाइमस्टैम्प सेट करने की आवश्यकता है ?


अपडेट 1

जैसा कि सुझाव दिया गया है कि मुझे एक ट्रिगर का उपयोग करने की आवश्यकता है, मैंने यह ट्रिगर लिखा है लेकिन कुछ सिंटैक्स त्रुटि है, क्या आप त्रुटि की पहचान करने में मेरी मदद कर सकते हैं?

CREATE TRIGGER users_feel_last BEFORE UPDATE ON users
FOR EACH ROW BEGIN
  IF NEW.feel <> OLD.feel THEN
    SET NEW.feel_last := now();
  END IF;
END;

अद्यतन २

  • एडब्ल्यूएस आरडीएस का उपयोग करने वालों के लिए: पैरामीटर "log_bin_trust_function_creators" डिफ़ॉल्ट रूप से सक्षम नहीं है, ट्रिगर बनाने के लिए यह आवश्यक है, इसे सेट करने के लिए यहां एक छोटी सी मार्गदर्शिका है: https://aws.amazon.com/it/premiumsupport/knowledge-center/rds-mysql-functions/

अब, जेम्स के जवाब के लिए धन्यवाद, मैंने ट्रिगर बनाया, यह अच्छी तरह से काम करता है

DELIMITER $$
CREATE TRIGGER before_feel_last_update 
    BEFORE UPDATE ON users
    FOR EACH ROW 
BEGIN

if(old.feel<>new.feel)
then
 set new.feel_last=current_timestamp;
elseif( old.feel = NULL )
then 
 set new.feel_last=current_timestamp;
end if;


END$$
DELIMITER ;
0
red 9 अगस्त 2019, 10:23

2 जवाब

सबसे बढ़िया उत्तर

आप नीचे दिए गए ट्रिगर का उपयोग BEFORE UPDATE पर कर सकते हैं

BEGIN

if(old.feel<>new.feel)
then

 set new.feel_last=current_timestamp;

end if;

END

1
James 9 अगस्त 2019, 11:11

MySQL में एक ट्रिगर आवश्यक नहीं है। यह कार्यक्षमता खुशी से अंतर्निहित है। आप तालिका को इस प्रकार परिभाषित कर सकते हैं:

create table users (
    . . .,
    update_datetime datetime default current_timestamp on update current_timestamp
);

आप इस डिफ़ॉल्ट के बारे में दस्तावेज़ीकरण में पढ़ सकते हैं।

2
Gordon Linoff 9 अगस्त 2019, 14:24