sqlite怎样在原有基础上添加新字段?

sqlite怎样在原有基础上添加新字段?,第1张

通过alter添加新的字段SQL语句:

但是如果这个字段已经存在的话,运行程序直接会世滑搏崩溃,我们可以在添加字段之前,对数据库进行判断看是否已经存在该字段了,方法如下:

SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型、限定符等等。

改变表名 - ALTER TABLE 旧表名 RENAME TO 新表名

增加一列 - ALTER TABLE 表名 ADD COLUMN 列名 数据类型

而修改一列无法像其他数据库那样直接以“ALTER TABLE 表名 ADD COLUMN 列名 数据类型”的方式来完成,所以要换种思路,具体步骤看下面:

将表名改为临时表

ALTER TABLE "Student" RENAME TO "_Student_old_20140409"

创建新表

CREATE TABLE "Student" (

"Id"  INTEGER PRIMARY KEY AUTOINCREMENT,

"Name"  Text)

导让仿入数据

INSERT INTO "Student" ("Id", "Name") SELECT "Id", "Title" FROM "_Student_old_20140409"

更新sqlite_sequence

UPDATE "sqlite_sequence" SET seq = 3 WHERE name = 'Student'

由于在Sqlite中使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于搜祥记录每个表的自增长字段的已使用的最大值,所以要一起更新下。如果有没有设置自增长,则跳过此步骤。

删除临时表(可选)

DROP TABLE _Student_old_20140409

1、创建测试临时表。

2、查看表中数据。

3、插入新纪录(所有列与表字段顺序一致)。

4、插入新记录(对于可空类型字段,插入空值时,可以省略该栏位。

5、插入新记录(对于VALUES后面按照表中顺序每个字段都赋值的时候,表名后面的栏位全部可仔宽以省略)。

6、修改表中数据。

7、删除表中数据,(删除完成后兄宽,念尘亮查询其结果)。

对于SQLite数据库而言有两个问唯昌题:

(1) 可以增加一列,但是该列只能是表的最后一列。

(2)不能删除一列。

如果想删除表A中的一列或者一行,首或拿先通过SQL创建一个临时表,然后把表A中期望保留的数据存储到临时表中,然后把表A删除,再通过SQL的create语句创建表A,最后将临时表中的衫山搭数据再复制回来

例1:在表coordinate中增加一列自动增长的id列。

BEGIN TRANSACTION  

CREATE TEMPORARY TABLE ptemp(provinceID int, longitude double, latitude double)  

INSERT INTO ptemp SELECT provinceID,longitude, latitude FROM coordinate  

DROP TABLE coordinate  

CREATE TABLE provincecoordinate(id INTEGER PRIMARY KEY AUTOINCREMENT, provinceID int, longitude double, latitude double)  

INSERT INTO provincecoordinate(provinceID, longitude, latitude) SELECT provinceID, longitude, latitude FROM ptemp  

DROP TABLE ptemp  

COMMIT

例2:在表china中增加一列自动增长的id列。

BEGIN TRANSACTION  

CREATE TEMPORARY TABLE ptemp(longitude double, latitude double)  

INSERT INTO ptemp SELECT longitude, latitude FROM china  

DROP TABLE china  

CREATE TABLE china(id INTEGER PRIMARY KEY AUTOINCREMENT, longitude double, latitude double)  

INSERT INTO china(longitude, latitude) SELECT longitude, latitude FROM ptemp  

DROP TABLE ptemp  

COMMIT


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11994833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存