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;
以下是输出:
总结
translate failed