我想为 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');
...
关于mysql - 自增组合键 InnoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968879/