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

Mysql एक विशिष्ट प्राथमिक कुंजी के साथ एक कॉलम को ऑटो-इंक्रीमेंट करता है

आप जो खोज रहे हैं उसे प्राप्त करने के लिए, आपको ट्रिगर . इस कार्य को पूरा करने का कोई अन्य सीधा तरीका नहीं है (मुझे लगता है)।

मैंने अभी एक तेज़ डेमो आज़माया है:

Create Table SoQuestion (
  UserId int,
  PostId int,
  PostNumber int null
 );

 CREATE TRIGGER inc_post_num 
 BEFORE INSERT ON SoQuestion
 FOR EACH ROW
 set New.PostNumber = (select num 
                       From (select count(*) as num 
                             from SoQuestion 
                             where UserId = New.UserId) as b) 
                     + 1;


insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);

select * FROM SoQuestion;

और यहाँ आउटपुट है जो मुझे मिला:

UserId | PostId | PostNumber |
==============================  
1      | 1      | 1          |
1      | 10     | 2          |
1      | 20     | 3          |
2      | 1      | 1          |
2      | 10     | 2          |
3      | 1      | 1          |
4      | 1      | 1          |

यह रहा डेमो

Auto_Increment पढ़ने के बाद दस्तावेज़ीकरण, मुझे ट्रिगर्स का उपयोग किए बिना इसे प्राप्त करने का एक और तरीका मिला। विचार एक Auto_Increment creating बनाने के बारे में है कॉलम और इसे दूसरे कॉलम के साथ PRIMARY KEY . के रूप में जोड़ें . हमारे मामले में यह UserId होगा और AUTO_INCREMENT PostNumber . होगा और वे दोनों प्राथमिक कुंजी बनाते हैं। इस प्रकार है:

Create Table SoQuestion (
  UserId int,
  PostId int,
  PostNumber int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (UserId, PostNumber)
 );

insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);

select * FROM SoQuestion;

यह हमें वही आउटपुट देगा जो पहले तरीके ने दिया था:

UserId | PostId | PostNumber |
==============================  
1      | 1      | 1          |
1      | 10     | 2          |
1      | 20     | 3          |
2      | 1      | 1          |
2      | 10     | 2          |
3      | 1      | 1          |
4      | 1      | 1          |

और ये रहा डेमो दूसरे तरीके के लिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Slick 3.0 का उपयोग करके Mysql से कनेक्ट करना - कोई उपयोगकर्ता नाम नहीं, कोई पासवर्ड नहीं और फर्जी ड्राइवर समान त्रुटि नहीं है

  2. MySQL max_user_connections बनाम max_connections

  3. Mysql में विचारों के लिए टिप्पणियाँ बनाएँ

  4. क्या InnoDB छँटाई वास्तव में इतनी धीमी है?

  5. एक साथ कई पंक्तियों को सम्मिलित करने के लिए अजगर mysqldb का उपयोग कैसे करें