一般的にCOUNT(id)+1よりMAX(id)+1のほうがベター

あとユニーク制約や適切なトランザクション分離レベルを使わないと同時実行時に同じidが作られる

そもそも種類ごとに連番を振る必要が本当にあるのか疑問