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

दो ऑटोइनक्रिकमेंट कॉलम या ऑटोइनक्रिकमेंट और दूसरे कॉलम में समान मान

तो आप एक कॉलम को 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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ClusterControl का उपयोग करके एक हाइब्रिड क्लाउड MySQL डेटाबेस परिनियोजित करें

  2. MySql पर EF कोर `अपडेट-डेटाबेस` विफल रहता है `__EFMigrationsHistory' मौजूद नहीं है`

  3. एक सिंगलटन के माध्यम से node.js mySQL कनेक्शन

  4. अजीब - mysql का sql ::SQLException इसके प्रकार से नहीं पकड़ा जाता है, लेकिन std ::अपवाद के रूप में पकड़ा जाता है और सफलतापूर्वक वापस डाला जाता है

  5. मैं mysql असली एस्केप स्ट्रिंग का उपयोग कैसे करूं?