sqlite3添加、修改列名(轉)


sqlite3添加、修改列名
http://blog.163.com/yi_xiaoluo@126/blog/static/72090439201161533941528/
SQLite如何刪除,修改、重命名列 .
http://blog.csdn.net/cangkukuaimanle/article/details/6847536


今天在SQLite數據庫中添加了一列,后來發現列名寫錯了,於是使用SQL語句來修改列名,可是根本不管用。

首先,請放棄alter吧。

sqlite官方說明如下:
SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table. It is not possible to rename a column, remove a column, or add or remove constraints from a table. 
大概意思是sqlite的alter功能只是alter table的一個子集,只有部分功能,比如重命名表名,新增列到現有表中。
不支持現有列的重命名,刪除和修改。


查了N多資料,貌似只能通過一種間接的辦法去做了,不管是重命名列還是刪除列。

比如說你要修改的表名是A,方法步驟如下:

1.新建一個臨時表T,這個T和表A具有相同的列。

2.把A中所有的數據都通過insert語句插入到T中

3.刪除表A

4.新建表A,這時表A的列名就是你想要的結果,以前想修改的列名是什么,這時候就定義成什么,以前要刪除的某個列,那么在定義的時候就不定義它。

5.恢復數據,把數據通過insert語句插入A,結構是insert into A select ... from tablen T

6.刪除臨時表T。

這個辦法太笨拙了,但是目前還沒有更好的辦法啊,啊,啊,啊,啊,啊,啊 ,啊, 啊, 啊,啊, 啊,

 

 

查了半天sqlite的手冊,沒找到怎么修改列名。最后用了一個很笨的方法。 
這里我要把post的tbl重命名為tb_l。

首先重命名post表。

ALTER TABLE post RENAME TO tmp_post;
在重新創建post表。

?1234 CREATE TABLE post(id integer primary key autoincrement,tb_l varchar(128) not null); 
把tmp_post的數據導入post,並刪除tmp_post;

insert into post (tb_l) select tbl from tmp_post;
drop table tmp_post;
如果原表tmp_post和新創建的標post列數一致,並且是一一對應的話,可以用一下語句導入。

insert into post select * from tmp_talbe;

--------------------------------------

 

 

 

使用Sqliteman修改表時,遇到一個問題,每當添加或修改列信息時,作為主鍵的信息就會丟失,所以只能自己寫Sql執行了。示例:

 

ALTER TABLE "store_productcategory"  ADD COLUMN "DisplayOrder" INT DEFAULT(0)

http://blog.csdn.net/az44yao/article/details/7736782


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM