嗨我知道之前已经问过这个问题,但我的问题不同,我想要的是在删除表格中的一行后重置auto_increment列。如果我有51行的表,我删除第48行,我希望第49行重置为48,50到49等。
我尝试过使用alter table,但是在删除行的地方插入数据,我想要的东西会改变顺序。
torrents
CREATE TABLE IF NOT EXISTS `torrents` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` varchar(250) NOT NULL,
`Kat_Link` varchar(250) NOT NULL,
`Tpb_Link` varchar(250) NOT NULL,
`Lime_Link` varchar(250) NOT NULL,
`ImgUrl` varchar(250) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB;
我想要的是运行select from table where ID = $id lmit 8
如果ID
不存在,我会少于8行。
答案 0 :(得分:0)
尝试一个触发器,我很长时间没有触及MySQL数据库,因此下面的语法可能不正确,但它提出了它试图实现的目标的想法。
CREATE OR REPLACE updateTableTrigger
AFTER delete on 'torrents'
FOR EACH ROW
BEGIN
SET @id = old.ID
UPDATE torrents SET ID = (@id-1) WHERE ID > @id;
END
基本上它只是在删除的行之后将行的ID减去一个。
因此,如果您删除ID为5的行,它将影响ID 5行之后的所有行,并将其值减1以填补空白。
答案 1 :(得分:0)
如果你坚持填补这个空白,可以通过一种方法来改变你提供的桌子上的后期记录。
SQL = "UPDATE torrents SET ID=ID-1 WHERE ID > 48";
要更改表格以重置AI,
ALTER TABLE `torrents ` AUTO_INCREMENT =51
答案 2 :(得分:0)
如果只使用limit
和你的select语句就很难实现,你想要的是ID
得到的行数(例如8行),如果是这样的话ID
不存在,您的select语句会比您想要的行少。
SELECT * FROM table LIMIT $r,$s // here you are guaranteed that you'll get 8 rows all the time