Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL ट्रिगर किसी फ़ील्ड को id के मान पर अपडेट करने के लिए

मुझे एक कथन में ऐसा करने का कोई तरीका नहीं पता, यहां तक ​​कि ट्रिगर का उपयोग करके भी।

@Lucky द्वारा सुझाया गया ट्रिगर समाधान MySQL में ऐसा दिखाई देगा:

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END

हालाँकि, एक समस्या है। BEFORE INSERT . में चरण, स्वतः उत्पन्न id मूल्य अभी तक उत्पन्न नहीं हुआ है। तो अगर group_id शून्य है, यह डिफ़ॉल्ट रूप से NEW.id है जो हमेशा 0 होता है।

लेकिन अगर आप AFTER INSERT . के दौरान इस ट्रिगर को सक्रिय करने के लिए बदलते हैं चरण, इसलिए आपके पास NEW.id . के जेनरेट किए गए मान तक पहुंच है , आप स्तंभ मानों को संशोधित नहीं कर सकते।

MySQL DEFAULT . के लिए भावों का समर्थन नहीं करता है एक कॉलम का, इसलिए आप इस व्यवहार को तालिका परिभाषा में भी घोषित नहीं कर सकते हैं। *अपडेट करें:MySQL 8.0.13 DEFAULT (<expression>) . का समर्थन करता है लेकिन अभिव्यक्ति अभी भी एक ऑटो-इन्क्रीमेंट मान पर निर्भर नहीं हो सकती है (यह दस्तावेज )

INSERT . करना ही एकमात्र उपाय है , और फिर तुरंत एक UPDATE . करें group_id को बदलने के लिए अगर यह सेट नहीं है।

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL तालिका नाम में विशेष वर्ण

  2. MySQL दृश्यों की सूची कैसे प्राप्त करें?

  3. mysql_real_escape_string वी.एस. ऐडलैशेज

  4. ClusterControl के साथ HAProxy मेट्रिक्स की निगरानी कैसे करें

  5. स्तंभों की गतिशील संख्या में MySQL धुरी पंक्ति