【发布时间】:2015-04-01 14:48:41
【问题描述】:
在 SQLite 的上下文中。
我有一个现有的表,该表当前填充了许多数据行。
我正在尝试向该表添加一个新的主键列,同时保留原始数据。
如下所示,我尝试了以下方法
- 向现有表(Id INTEGER)添加一个新列。
- 更改现有表的名称。
- 创建一个包含新主键(Id INTEGER PRIMARY KEY)的新表。
- 将重命名表中的所有数据插入新创建的表中。
- 删除重命名的表。
我认为这会起作用的原因是因为根据 SQlite 文档,
声明为 INTEGER PRIMARY KEY 的列将自动递增。
但是我收到以下错误。
ErrorCode : 19
Message : constraint failed
UNIQUE constraint failed: Person.Id
Result : Constraint
这是我的代码。
--Add a new column to the existing table(Id INT).
ALTER TABLE [Person]
ADD Id INTEGER;
--Change the name of the existing table.
ALTER TABLE [Person] RENAME TO Person_temp;
--Create a new table which includes the new PK.
CREATE TABLE Person(
Id INTEGER PRIMARY KEY,
FirstName nvarchar(100) NULL,
LastName nvarchar(100) NULL
);
--Insert all data from the renamed table into the new table.
INSERT INTO Person SELECT * FROM Person_temp;
--Drop the renamed table.
DROP TABLE Person_temp;
有人能解释一下吗?
【问题讨论】:
标签: database sqlite unique-constraint