【发布时间】:2018-10-14 17:16:32
【问题描述】:
假设我创建了一个表并通过以下方式插入一行:
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 );
我会从一开始就拥有我正在寻找的那种桌子。
在 people_id 列中维护 rowid 值很重要。例如,假设 John Doe 在 people 中排在第 47 位。转换后,John Doe 的 people_id 需要为 47。
我想我可以简单地将数据从一个表复制到另一个表,但我想知道是否有更好或标准的方法来完成这种转换。
【问题讨论】:
标签: sqlite primary-key alter-table