supports auto increment of key