SQLite rowid的问题不是我所期望的

tpxzln5u  于 2023-04-21  发布在  SQLite
关注(0)|答案(1)|浏览(111)

我正在做一个实现sqlite的web应用程序项目。我遇到了一个问题,我想从数据库中请求信息,但只能从具有特定索引的行中请求。问题是表中的rowid不是1,2,3,....
下面我已经发布:
1.负责创建/填充表的代码
1.代码console.log正在执行rowid
1.来自(2)的输出
我是不是在创建表时做错了什么,导致了这个问题?如果不是,有没有办法重置表的rowid,使它们是1,2,3,...?

// node.js file filling the database
...
    db.serialize(function () {
      db.run(
        "CREATE TABLE IF NOT EXISTS Movies(title TEXT UNIQUE, image TEXT, description TEXT, duration TEXT, release TEXT, age TEXT, schedule TEXT)"
      );

      var stmt = db.prepare(
        "INSERT OR REPLACE INTO Movies(title, image, description, duration, release, age, schedule) VALUES (?, ?, ?, ?, ?, ?, ?)"
      );
      const jsondata = JSON.stringify(m.schedule);
      stmt.run(
        m.title,
        m.image,
        m.description,
        m.duration,
        m.release,
        m.age,
        jsondata
      );
      stmt.finalize();
    });
...
// node.js file handling requests
...
  app.get('/moviesJson', (req,res) => {
    const sql = 'SELECT rowid FROM Movies;
    db.all(sql, (err, rows) => {
      if(err) throw err;
      console.log(rows);
      res.json(rows);       
    });
  });
...
// output
[
  { rowid: 568 }, { rowid: 576 },
  { rowid: 567 }, { rowid: 562 },
  { rowid: 571 }, { rowid: 472 },
  { rowid: 575 }, { rowid: 570 },
  { rowid: 561 }, { rowid: 279 },
  { rowid: 569 }, { rowid: 574 },
  { rowid: 284 }, { rowid: 565 },
  { rowid: 451 }, { rowid: 573 },
  { rowid: 564 }, { rowid: 572 },
  { rowid: 563 }, { rowid: 566 }
]
ht4b089n

ht4b089n1#

SqLite文档说:

  • ...上述普通ROWID选择算法将生成单调递增的唯一ROWID,只要您从不使用最大ROWID值,并且从不删除表中具有最大ROWID的条目。如果您删除过行或创建过具有最大可能ROWID的行,则在创建新行时可能会重用以前删除的行中的ROWID,并且新创建的ROWID可能不会严格按升序排列。*

如果只插入行而不删除行,我建议创建空表将其重置为1;否则,您不能依赖ROWID始终是顺序的。

相关问题