我有一个优先事项表,可以简明扼要地代表:
CREATE TABLE test (
id int PRIMARY KEY,
priority int,
status int
)
<代码>优先权/代码>为优先权(最低为一)和<代码>status为项目状态(0 即为科索沃检索)。 任务是以最优先的方式收回该要素并重新确定其地位,因此,该守则类似于这一条(假编码):
try = 0;
while(try++ < max_tries) {
result = query("SELECT id FROM test WHERE status=0 ORDER BY priority LIMIT 0,1");
if(result not empty) {
/* found a row, try to update */
result2 = query("UPDATE test SET status=1 WHERE id={result[id]} AND status=0");
if(affected_rows(result2) > 0) {
/* if update worked fine, we can use this ID */
return result[id];
}
/* otherwise try again */
}
return NULL;
该守则应在任何Sql数据库(目前的要求是Mysql、Oracle、服务器和DB2,但可能更多)上运行(如不同的LMIT syntax)。 我知道,所有必要的行文都支持更新的“受影响行文”。 这种做法的任何潜在问题或陷阱? 如果是,为什么要使用上述表格?