0

我有下表

SNo Value Item

其中 Sno 是也存在于另一个表中的列。现在,我需要的是一个自增字段,如果 sno 的值是一个常数,它将继续增加,然后回到 0 并在 sno 的值发生变化时再次开始增加。有没有办法做到这一点?

假设我有四列:

SNO |Value |Item | AUtoIncrementingField
1    344      a            0 
1    345      b            1 
1    346      c            2 
2    568      d            0 

因此,当我说插入此表时,SNO 的值从原来的值发生变化,自动递增字段的值应该回到 0。有没有内置的方法可以做到这一点,或者在 mysql 上编写一些代码为达到这个。如果不是,我还需要什么其他选项来唯一标识属于某个 sno 值的每个值/项目?

4

1 回答 1

1

虽然这对 InnoDB 没有帮助,但值得指出的是 MyISAM 本身就支持此功能。如使用AUTO_INCREMENT中所述:

MyISAM 笔记

对于MyISAM表,您可以AUTO_INCREMENT在多列索引中的辅助列上指定。在这种情况下,AUTO_INCREMENT列的生成值计算为。当您要将数据放入有序组时,这很有用。MAX(auto_increment_column) + 1 WHERE prefix=given-prefix

创建表动物(
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    名称 CHAR(30) 非空,
    主键 (grp,id)
) 引擎=MyISAM;

插入动物 (grp,name) 值
    ('哺乳动物','狗'),('哺乳动物','猫'),
    ('鸟','企鹅'),('鱼','松懈'),('哺乳动物','鲸鱼'),
    ('鸟','鸵鸟');

SELECT * FROM 动物 ORDER BY grp,id;

返回:

+--------+----+---------+
| grp | 编号 | 姓名 |
+--------+----+---------+
| 鱼| 高分辨率照片| CLIPARTO 1 | 松懈|
| 哺乳动物| 高分辨率照片| CLIPARTO 1 | 狗 |
| 哺乳动物| 高分辨率照片| CLIPARTO 2 | 猫 |
| 哺乳动物| 高分辨率照片| CLIPARTO 3 | 鲸鱼|
| 鸟| 高分辨率照片| CLIPARTO 1 | 企鹅 |
| 鸟| 高分辨率照片| CLIPARTO 2 | 鸵鸟|
+--------+----+---------+

在这种情况下(当AUTO_INCREMENT列是多列索引的一部分时),AUTO_INCREMENT如果您删除任何组中具有最大值的行,则会重用AUTO_INCREMENT值。即使对于通常不重用值的MyISAM表也会发生这种情况。AUTO_INCREMENT

于 2012-10-14T02:03:34.583 回答