तो आप एक कॉलम को auto_increment सुविधा का उपयोग करने देना चाहते हैं, लेकिन उसी तालिका में दूसरे कॉलम का भी समान मूल्य बनाना चाहते हैं?
मैं एक कारण के बारे में नहीं सोच सकता कि आपको इस सुविधा की आवश्यकता होगी। शायद आप समझा सकें कि आप क्या हासिल करने की कोशिश कर रहे हैं, और मैं एक अलग समाधान सुझा सकता हूं?
इसके लिए एक ट्रिगर काम नहीं करेगा। यह चिकन और अंडे की समस्या है:
- आप किसी भी कॉलम के मान को
AFTER
में नहीं बदल सकते हैं चालू कर देना। - लेकिन ऑटो-इन्क्रीमेंट मान अभी तक सेट नहीं किया गया है जब एक
BEFORE
ट्रिगर निष्पादित।
यह MySQL 5.7 GENERATED
. का उपयोग करने के लिए भी काम नहीं करेगा कॉलम:
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT GENERATED ALWAYS AS (id)
);
ERROR 3109 (HY000): Generated column 'why_would_you_want_this'
cannot refer to auto-increment column.
आप इसे एक एकल SQL कथन में नहीं कर सकते। आपको INSERT
करना होगा पंक्ति, और फिर तुरंत एक UPDATE
अपने दूसरे कॉलम को उसी मान पर सेट करने के लिए।
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT
);
INSERT INTO MyTable () VALUES ();
UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID()
WHERE id = LAST_INSERT_ID();
आप वैकल्पिक रूप से AUTO_INCREMENT
. के अलावा किसी अन्य तंत्र का उपयोग करके आईडी मान उत्पन्न कर सकते हैं (उदाहरण के लिए Memcached वृद्धिशील कुंजी)। तब आप दोनों स्तंभों में नया मान सम्मिलित कर सकते हैं:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);