SQL在第一个可用行id中插入数据
我有一个SQL表,它有一个主键(SQL在第一个可用行id中插入数据,sql,insert,Sql,Insert,我有一个SQL表,它有一个主键(Row\u id),其格式如下: 110001 110002 110003 ... 随着时间的推移,可以通过删除某些行来更新此表。我有一个php脚本,希望它在第一个可用位置插入新行,而不仅仅是增加最后一个现有id 例如,如果我有: 110001 110002 110004 110005 我希望插入新行并指定id=110003而不是110006 任何帮助都将不胜感激 不知道为什么要重用id,但是,我们开始吧 假设您的表名为Tbl: S
Row\u id
),其格式如下:
110001
110002
110003
...
随着时间的推移,可以通过删除某些行来更新此表。我有一个php脚本,希望它在第一个可用位置插入新行,而不仅仅是增加最后一个现有id
例如,如果我有:
110001
110002
110004
110005
我希望插入新行并指定id=110003
而不是110006
任何帮助都将不胜感激 不知道为什么要重用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之后,很明显,您必须基于前面的值进行插入。
所以
您可以将您的id设置为唯一的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错误。我们需要捕获它,因为它是唯一的email字段,但是它也可能被引发,因为您破坏了主键或另一个我们忽略存在的唯一字段。您必须调整此代码,以防您认为在查询过程中其他一些独特的约束也可能被破坏
如果查询成功;您可以插入该特定id。这是一个糟糕的主意。不要这样做。请检查我的工作回答。如果我希望Tbl本身是另一个选择的结果,该怎么办?你能给我一个问题吗?@bijibuji我不明白你的问题。请尽量准确些。我还没有确切的表格Tbl,但这是另一个选择的结果。我怎样才能在你建议的查询中嵌入这个SELECT呢?@bijibuji看看我上面写的第二个查询,并将其作为下一个查询库的基础!它现在运转良好。请让我再问你两个问题Don。。。当我在phpmyadmin中运行查询时,如何在php中访问结果product_id,因为它列在“MIN(a.product_id+1)”字段下。我想在php中使用生成的产品_id(比如110001)
`$query = "...";
try {
mysql_query($query);
} catch(Exception $ex) {
if (mysql_errno() == 1062) {
throw new Exception('The email you used exists already');
} else {
throw $ex;
}
}