自动增加字段直到某个条件满足mysql

时间:2012-10-14 01:22:51

标签: mysql

我有下表

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的值从whatr改变时,它最初是自动递增字段的值应该回到0.是否有任何内置的方式来做这个,或者写一些代码顶部的mysql实现这一点。如果没有,我还有什么其他选项可以唯一地标识属于特定sno值的每个值/项目?

1 个答案:

答案 0 :(得分:1)

虽然这对InnoDB没有帮助,但值得指出MyISAM本身支持此功能。正如Using AUTO_INCREMENT所述:

  

MyISAM备注

     

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

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
     

返回:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+
     

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