0

我有一个 SQL 表,其主键 ( Row_id) 的格式如下:

110001  
110002  
110003  
...  

随着时间的推移,可以通过删除一些行来更新该表。我有一个 php 脚本,希望它在第一个可用位置插入新行,而不仅仅是增加最后一个现有的 id。

例如,如果我有这个:

110001  
110002  
110004  
110005

我想插入新行并给出id = 110003not 110006

任何帮助,将不胜感激!

4

2 回答 2

2

不知道为什么要重用 id,但是,我们开始吧

假设您的表名是Tbl

Select MIN(a.Id + 1)
From   Tbl A 
       Left Join Tbl B
         On A.Id = B.Id - 1
Where  B.Id Is NULL

这应该适用于检索您想要的 id。
之后,显然,您必须根据先前的值进行插入。
所以

INSERT into yourTable(id,....) VALUES(
    Select MIN(a.Id + 1)
    From   Tbl A 
           Left Join Tbl B
             On A.Id = B.Id - 1
    Where  B.Id Is NULL,
    .....)

在此处输入图像描述

于 2012-06-28T15:24:59.260 回答
0

您可以使您的 id 成为唯一的,然后从 110001 开始运行 for/while 循环。

`$query = "...";
try {
    mysql_query($query);
} catch(Exception $ex) {
    if (mysql_errno() == 1062) {
        throw new Exception('The email you used exists already');
    } else {
        throw $ex;
    }
}

` 只要一个唯一键被破坏,就会引发 1062 错误。由于唯一的电子邮件字段,我们需要捕获它,但也可能因为您破坏了主键或另一个我们忽略存在的唯一字段而引发它。您将不得不修改此代码,以防您认为在此查询期间某些其他唯一约束也可能会中断。

如果查询成功;您可以插入该特定 ID。

于 2012-06-28T15:28:11.063 回答