पता नहीं क्यों आपको दो कॉलम ऑटो इंक्रीमेंटिंग वैल्यू की आवश्यकता है, इसका कोई मतलब नहीं है ... लेकिन अगर आप जोर देते हैं -
आप इसे यूडीएफ या एसपी में पूरा कर सकते हैं इस तरह आपके पास कई कॉलम ऑटो इंक्रीमेंटिंग वैल्यू हैं।
उदाहरण #1:संग्रहित प्रक्रिया (SP)
तालिका
CREATE TABLE tests (
test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
test_num INT(10) NULL,
test_name VARCHAR(10) NOT NULL
);
संग्रहीत प्रक्रिया
DELIMITER $$
CREATE PROCEDURE autoInc (name VARCHAR(10))
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(test_num)
FROM tests) + 1;
INSERT INTO tests (test_num, test_name)
VALUES (getCount, name);
END$$
DELIMITER ;
एसपी को कॉल करें
CALL autoInc('one');
CALL autoInc('two');
CALL autoInc('three');
तालिका ऊपर देखें
SELECT * FROM tests;
+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
| 1 | 1 | one |
| 2 | 2 | two |
| 3 | 3 | three |
+---------+----------+-----------+
उदाहरण #2:उपयोगकर्ता-परिभाषित कार्य (यूडीएफ)
तालिका
CREATE TABLE tests (
test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
test_num INT(10) NULL,
test_name VARCHAR(10) NOT NULL
);
उपयोगकर्ता द्वारा परिभाषित कार्य
DELIMITER $$
CREATE FUNCTION autoInc ()
RETURNS INT(10)
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(test_num)
FROM tests) + 1;
RETURN getCount;
END$$
DELIMITER ;
यूडीएफ का उपयोग करके सम्मिलित करें
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'one');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'two');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'three');
तालिका ऊपर देखें
SELECT * FROM tests;
+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
| 1 | 1 | one |
| 2 | 2 | two |
| 3 | 3 | three |
+---------+----------+-----------+
इनका परीक्षण और सत्यापन किया गया है। मैं व्यक्तिगत रूप से फ़ंक्शन का उपयोग करूंगा, यह अधिक लचीला है।