MySQL में BEFORE INSERT ट्रिगर का उपयोग करके पंक्ति डालने से पहले दिनांक/समय कॉलम को स्वचालित रूप से वर्तमान दिनांक पर सेट कर सकते हैं।
सिंटैक्स
CREATE TRIGGER ट्रिगर_नाम BEFORE INSERT ON टेबल_नाम FOR EACH ROW SET NEW.कॉलम_नाम = फ़ंक्शन();
उदाहरण: DueDate को CURDATE() पर सेट करें
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable1584 (DueDate DATETIME);
2. ट्रिगर बनाएं
mysql> CREATE TRIGGER insertDate
-> BEFORE INSERT ON DemoTable1584
-> FOR EACH ROW
-> SET NEW.DueDate = CURDATE();
3. मान बिना डाले INSERT (ट्रिगर भरेगा)
mysql> INSERT INTO DemoTable1584 VALUES(); mysql> INSERT INTO DemoTable1584 VALUES(); mysql> INSERT INTO DemoTable1584 VALUES();
4. परिणाम
mysql> SELECT * FROM DemoTable1584;
+---------------------+ | DueDate | +---------------------+ | 2019-10-18 00:00:00 | | 2019-10-18 00:00:00 | | 2019-10-18 00:00:00 | +---------------------+
ट्रिगर घटक
BEFORE INSERT- INSERT से पहले निष्पादितFOR EACH ROW- प्रत्येक पंक्ति के लिएNEW.कॉलम_नाम- नई पंक्ति का कॉलम (संशोधन योग्य)OLD.कॉलम_नाम- पुरानी पंक्ति का कॉलम (UPDATE/DELETE में)
अन्य उपयोगी फ़ंक्शन
SET NEW.DueDate = NOW(); -- वर्तमान दिनांक-समय SET NEW.DueDate = CURDATE(); -- केवल वर्तमान दिनांक SET NEW.DueDate = CURRENT_TIMESTAMP; -- समान NOW() SET NEW.CreatedAt = UTC_TIMESTAMP(); -- UTC समय
ट्रिगर देखें/हटाएं
SHOW TRIGGERS; DROP TRIGGER IF EXISTS insertDate;
सावधानियां
- ट्रिगर प्रदर्शन प्रभाव डालते हैं (प्रति पंक्ति निष्पादन)
- जटिल लॉजिक से बचें
- ट्रिगर के भीतर ट्रिगर निष्पादन सीमित (MySQL 8.0+ में बेहतर)
- प्रतिकृति में ट्रिगर परिभाषा मास्टर/स्लेव दोनों पर होनी चाहिए
विकल्प: डिफ़ॉल्ट मान (MySQL 8.0.13+)
CREATE TABLE DemoTable1584 (
DueDate DATETIME DEFAULT (CURDATE())
);
सरल मामलों के लिए ट्रिगर के बजाय डिफ़ॉल्ट मान पसंद करें।