删除行后重置auto_increment

时间:2014-07-10 02:56:59

标签: php mysql sql

嗨我知道之前已经问过这个问题,但我的问题不同,我想要的是在删除表格中的一行后重置auto_increment列。如果我有51行的表,我删除第48行,我希望第49行重置为48,50到49等。

enter image description here

我尝试过使用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行。

3 个答案:

答案 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