我有一个SQL表,其主键(Row_id
)的格式如下:
110001
110002
110003
...
可以通过随时间删除某些行来更新此表。我有一个PHP脚本,并希望它将新行插入第一个可用位置,而不仅仅是为了增加最后一个现有ID。
例如,如果我有这个:
110001
110002
110004
110005
我想要插入新行,并且id = 110003
不是110006
。
任何帮助将不胜感激!
答案 0 :(得分:2)
不知道为什么要重用id(s),但是,我们在这里
假设您的表名为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,
.....)
答案 1 :(得分: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。