gpt4 book ai didi

database - SQLite:在保留数据的同时将具有主键的列添加到现有表

转载 作者:搜寻专家 更新时间:2023-10-30 23:04:33 24 4
gpt4 key购买 nike

在 SQLite 的上下文中。

我有一个现有表,该表当前填充了多行数据。

我正在尝试向该表添加一个新的主键列,同时保留原始数据。

如下所示,我尝试了以下方法

  1. 向现有表中添加一个新列 (Id INTEGER)。
  2. 更改现有表的名称。
  3. 创建一个包含新主键(Id INTEGER PRIMARY KEY)的新表。
  4. 将重命名表中的所有数据插入新创建的表中。
  5. 删除重命名的表。

我认为这可行的原因是因为根据 SQlite 文档,

A column declared INTEGER PRIMARY KEY will autoincrement.

但是我收到以下错误。

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;

任何人都可以提供一些启示吗?

最佳答案

由于您没有在插入查询中声明列名,因此列顺序取决于它们在创建/添加时的顺序。尝试指定列名。无论如何,这通常是一个很好的做法

--Insert all data from the renamed table into the new table.
INSERT INTO Person(Id, FirstName, LastName) SELECT Id, FirstName, LastName FROM Person_temp;

顺便说一下,您可能不需要在第一个表中添加 Id 列:

--Insert all data from the renamed table into the new table.
INSERT INTO Person(FirstName, LastName) SELECT FirstName, LastName FROM Person_temp;

Id 的隐式空值将被自动增量替换

关于database - SQLite:在保留数据的同时将具有主键的列添加到现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281434/

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