Php 删除行时如何在mysql自动递增字段中保持正确的数字顺序
我有一个表a,它有一个自动递增的序列号字段SLNO。当我在表中插入值时,它将自动递增,如1,2,3,4。。。等等,但当我从表中删除一行时,顺序会中断。即,如果删除序列号为2的行,则序列号字段将为1,3,4。但是我想保持一个连续的顺序,比如1,2,3,甚至删除行。有没有办法维持这种顺序,比如使用触发器或其他什么主自动递增键只用于唯一地识别记录。别管它了 不要误用主键作为记录顺序的指示器。如果您需要记录的特定顺序,请使用额外的列。例如,Php 删除行时如何在mysql自动递增字段中保持正确的数字顺序,php,mysql,Php,Mysql,我有一个表a,它有一个自动递增的序列号字段SLNO。当我在表中插入值时,它将自动递增,如1,2,3,4。。。等等,但当我从表中删除一行时,顺序会中断。即,如果删除序列号为2的行,则序列号字段将为1,3,4。但是我想保持一个连续的顺序,比如1,2,3,甚至删除行。有没有办法维持这种顺序,比如使用触发器或其他什么主自动递增键只用于唯一地识别记录。别管它了 不要误用主键作为记录顺序的指示器。如果您需要记录的特定顺序,请使用额外的列。例如,时间戳列 如果需要记录的特定顺序,请使用默认值为current\
时间戳
列
如果需要记录的特定顺序,请使用默认值为current\u timestamp
的timestamp
列。这样它将自动插入
ALTER TABLE your_table
ADD column inserted_timestamp TIMESTAMP default current_timestamp;
您可以通过更改表并删除主键,然后再次创建主键来完成此操作
但你为什么需要这个。如果已将此键用作其他表中的外键。然后您丢失了所有数据。您应该保持原样 但是,如果确实需要,可以“重新计算”主键,即索引:
set @pk:=0;
update
your_table
set pk=@pk:=@pk+1
order by pk;
添加一列,该列将说明已删除的内容 例如: 1-已删除 0-未删除 并在select查询中添加where deleted=0
primary key column 2 column3 ..... deleted
1 1
2 0
3 0
4 1
5 0
存储一条记录的数量会使删除效率低下。相反,您可以依赖现有的SLNO索引,这对于我想到的所有用例都应该足够了 如果您
选择无限制的任何订单。。。偏移量k
,然后返回的行具有ID k、k+1、k+2
如果要获取记录的id,并知道其SLNO:
SELECT COUNT(SLNO) FROM A WHERE SLNO <= thatnumber
我只需要为我的记录指定一个顺序,你能建议一种方法吗。我想在删除订单时使用触发器来维护这样的订单,这是正确的选择还是有其他简单的方法可以确定日期和时间,但我想保留序列号,如1,2,3…等。在我的回答中,我建议不要这样做,他可能会丢失他的数据。我知道答案是低效的。但从技术上讲,只有这个答案是可能的。
SELECT * FROM A ORDER BY SLNO LIMIT 1 OFFSET thatnumber