2012-08-15 96 views
5

我想創建一個InnoDB MySQL表的MyISAM行爲。我想有一個複合主鍵:自動增量複合鍵InnoDB

PRIMARY KEY(ID1,ID2)

凡基於ID2的值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

什麼你的意思是「哪裏id1自動增量基於id2的值。」? – 2012-08-15 12:03:09

+0

查看發佈的示例數據。這是我想要的行爲。 – CaptainStiggz 2012-08-15 12:04:07

+0

你可以做很多工作來實現這樣的事情。這將是緩慢的片狀和脆弱的。這應該是兩個表格,或一個單一的值鍵。 – 2012-08-15 12:07:25

回答

7

您可以使用此BEFORE INSERT觸發器替換成零的ID值 -

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或ID2),以產生新的價值 -

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'); 
...