我有下表
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值的每个值/项目?
答案 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
值通常不会被重用。