让我解释一下我的数据结构。
此特定表将用于组织网站的类别/子类别树。
如您所见,主类别(没有任何父类别的类别)将被分配ID为1到99。
同时,子类别将被分配一个以父类别的id开头的id。例如,属于类别1的所有子类别的id将从101到199;属于类别2的所有子类别的id都是201到299,以此类推。
问题是:我能告诉mysql在ids101和199之间的下一个可用的“slot”上“insert value1,value2,value3”吗?
如中所示,如果存在使用ids 102103104插入的行(如上图所示)。如果我说“insert between 101 and 199”,mysql会自动插入下一行id为105的内容。
如果mysql或mysql过程无法实现,那么可以用php中的函数来实现吗(检索所有值,做一些数学运算,然后插入数据)。
如果不遵循这个特定的规则(因为表结构也使用父\ id),那么这个规则不会破坏网站,它的存在只是为了使数据库更易于阅读,并使人们阅读或组织数据时不那么混乱。
先谢谢你。
1条答案
按热度按时间jgovgodb1#
作为初学者:我不建议这样做。代理主键本身不应具有特定的功能含义;它只是用来唯一地标识一个记录,并可能作为外键的引用。我还要指出,您的系统伸缩性不好,因为它不能支持9个以上的根类别(或给定类别的99个子类别,以此类推)。
这就是说:你所要求的在技术上是可行的,但它需要对每一张table进行额外的扫描
insert
:技术在于使用
insert ... select ...
语法,以及获取给定范围的高水位线的聚合查询。如果范围为空,则指定一个与范围开头相对应的默认值。如果范围已满,则insert
未形成。