gpt4 book ai didi

SQLITE:如何将 rowid 列转换为常规列

转载 作者:行者123 更新时间:2023-12-03 18:28:02 30 4
gpt4 key购买 nike

假设我创建一个表并通过执行以下操作插入一行:

CREATE TABLE people (first_name text NOT NULL, last_name text NOT NULL );
INSERT INTO people (first_name, last_name) VALUES ('John', 'Doe');

我可以执行:
SELECT rowid as ID, first_name, last_name FROM people

并按预期取回三列数据。

但是,假设我想将自动 rowid 列转换为常规列,这样行的 ID 在被删除时不会改变,等等。

我怎样才能做到这一点?

我尝试过的是:
ALTER TABLE people ADD people_id INTEGER;
ALTER TABLE people ADD PRIMARY KEY (people_id);

第一条语句成功,但第二条语句给我一个错误:
near "PRIMARY": syntax error: ALTER TABLE people ADD PRIMARY

如果我最初将表创建为:
CREATE TABLE people (people_id INTEGER PRIMARY KEY, first_name text NOT NULL, last_name text NOT NULL );

从一开始,我就会拥有我正在寻找的那种 table 。

在 people_id 列中维护 rowid 值很重要。例如,假设 John Doe 在 people 中排在第 47 位。转换后,John Doe 的 people_id 需要为 47。

我想我可以简单地将数据从一个表复制到另一个表,但我想知道是否有更好或标准的方法来完成这种转换。

最佳答案

肖恩的回答是合理的(我已经投了赞成票),但我会提供一个我认为稍微整洁的变体,因为新表不会以带引号的模式结束:

TRANSACTION;
ALTER TABLE people RENAME TO old_people;
CREATE TABLE people(people_id INTEGER PRIMARY KEY
, first_name TEXT NOT NULL,
, last_name TEXT NOT NULL);
INSERT INTO people(people_id, first_name, last_name)
SELECT rowid, first_name, last_name FROM old_people;
DROP TABLE old_people;
COMMIT;
VACUUM;

关于SQLITE:如何将 rowid 列转换为常规列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52805147/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com