2012-08-15 10 views
5

मैं एक आईओएसडीबी MySQL तालिका के लिए एक MyISAM व्यवहार की तरह बनाना चाहता हूं। मैं एक समग्र प्राथमिक कुंजी करना चाहते हैं:ऑटो वृद्धि कंपोजिट कुंजी InnoDB

प्राथमिक कुंजी (ID1 आईडी 2)

कहाँ आईडी 2 के मूल्य के आधार ID1 ऑटो वेतन वृद्धि। InnoDB के साथ इसे पूरा करने का सबसे अच्छा तरीका क्या है?

+----------+-------------+--------------+ 
|  id1 |   id2 | other_column | 
+----------+-------------+--------------+ 
|  1 |   1 | Foo   | 
|  1 |   2 | Bar   | 
|  1 |   3 | Bam   | 
|  2 |   1 | Baz   | 
|  2 |   2 | Zam   | 
|  3 |   1 | Zoo   | 
+----------+-------------+--------------+ 
+0

क्या क्या आपका मतलब है "आईडी 2 के मूल्य के आधार पर आईडी 1 ऑटो वृद्धि।"? –

+0

पोस्ट किए गए उदाहरण डेटा देखें। यही वह व्यवहार है जो मैं चाहता हूं। – CaptainStiggz

+0

आप इस तरह कुछ हासिल करने के लिए बहुत काम कर सकते हैं। यह धीमी flaky और नाजुक होगा। यह दो टेबल, या एक मूल्य कुंजी होना चाहिए। –

उत्तर

7

आप शून्य आईडी-मानों को बदल करने के लिए सम्मिलित करें ट्रिगर से पहले इस का उपयोग कर सकते हैं -

CREATE TRIGGER trigger1 
    BEFORE INSERT 
    ON table1 
    FOR EACH ROW 
BEGIN 

    SET @id1 = NULL; 

    IF NEW.id1 = 0 THEN 
    SELECT COALESCE(MAX(id1) + 1, 1) INTO @id1 FROM table1; 
    SET NEW.id1 = @id1; 
    END IF; 

    IF NEW.id2 = 0 THEN 

    IF @id1 IS NOT NULL THEN 
     SET NEW.id2 = 1; 
    ELSE 
     SELECT COALESCE(MAX(id2) + 1, 1) INTO @id2 FROM table1 WHERE id1 = NEW.id1; 
     SET NEW.id2 = @id2; 
    END IF; 

    END IF; 

END 

फिर शून्य मान सम्मिलित (ID1 या आईडी 2) नए मूल्यों उत्पन्न करने के लिए -

INSERT INTO table7 VALUES(0, 0, '1'); 
INSERT INTO table7 VALUES(0, 0, '2'); 
INSERT INTO table7 VALUES(1, 0, '3'); 
INSERT INTO table7 VALUES(1, 0, '4'); 
INSERT INTO table7 VALUES(1, 0, '5'); 
... 
संबंधित मुद्दे