我想为InnoDB MySQL表创建类似于MyISAM的行为。我想要一个复合主键:
主键(id1,id2)
其中id1根据id2的值自动递增。用InnoDB做到这一点的最佳方法是什么?
+----------+-------------+--------------+ | id1 | id2 | other_column | +----------+-------------+--------------+ | 1 | 1 | Foo | | 1 | 2 | Bar | | 1 | 3 | Bam | | 2 | 1 | Baz | | 2 | 2 | Zam | | 3 | 1 | Zoo | +----------+-------------+--------------+
您可以使用此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'); ...