Skip to main content

SQLite逐步重命名列

SQLite ALTER TABLE RENAME COLUMN语句简介

自3.25.0版以来,SQLite增加了对使用ALTER TABLE语句重命名列的支持,该语句具有以下语法:

ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;

在这种语法中:

SQLite ALTER TABLE RENAME列示例

让我们以使用ALTER TABLE RENAME COLUMN语句为例。

首先,创建一个名为Locations的新表:

CREATE TABLE Locations(
LocationId INTEGER PRIMARY KEY,
Address TEXT NOT NULL,
City TEXT NOT NULL,
State TEXT NOT NULL,
Country TEXT NOT NULL
);

其次,使用insert语句将新行插入位置表:

INSERT INTO Locations(Address,City,State,Country)
VALUES('3960 North 1st Street','San Jose','CA','USA');

第三,使用ALTER TABLE rename column语句将列地址重命名为Street:

ALTER TABLE Locations
RENAME COLUMN Address TO Street;

第四,从Locations表中查询数据:

SELECT * FROM Locations;

输出:

LocationId  Street                 City        State       Country
---------- --------------------- ---------- ---------- ----------
1 3960 North 1st Street San Jose CA USA

最后,显示Locations表的模式:

.schema Locations

输出:

CREATE TABLE Locations(
LocationId INTEGER PRIMARY KEY,
Street TEXT NOT NULL,
City TEXT NOT NULL,
State TEXT NOT NULL,
Country TEXT NOT NULL
);

重命名列的旧方法

SQLite在版本3.25.0之前不支持ALTER TABLE RENAME列语法。

如果您使用的SQLite版本低于3.25.0,并且无法升级,则应按照以下步骤重命名列:

重命名列示例

以下语句重新创建位置表:

DROP TABLE IF EXISTS Locations;
CREATE TABLE Locations(
LocationId INTEGER PRIMARY KEY,
Address TEXT NOT NULL,
State TEXT NOT NULL,
City TEXT NOT NULL,
Country TEXT NOT NULL
);

这个INSERT语句会在位置表中插入一个新行:

INSERT INTO Locations(Address,City,State,Country)
VALUES('3960 North 1st Street','San Jose','CA','USA');

假设要将列地址更改为Street。

首先,启动一个新事务:

BEGIN TRANSACTION;

其次,创建一个名为LocationsTemp的新表,除了地址列之外,它的结构与Locations表相同:

CREATE TABLE LocationsTemp(
LocationId INTEGER PRIMARY KEY,
Street TEXT NOT NULL,
City TEXT NOT NULL,
State TEXT NOT NULL,
Country TEXT NOT NULL
);

第三,将数据从表位置复制到LocationsTemp:

INSERT INTO LocationsTemp(Street,City,State,Country)
SELECT Address,City,State,Country
FROM Locations;

第四,删除位置表:

DROP TABLE Locations;

第五,将表LocationsTemp重命名为Locations:

ALTER TABLE LocationsTemp 
RENAME TO Locations;

最后,提交事务:

COMMIT;

如果查询位置表,您将看到列地址已重命名为Street:

SELECT * FROM Locations;

以下是输出:

sqlite rename column example

总结

translate failed