Sqlite 删除列

     1. 看到网上说利用:alter table table_name drop column col_name ; Sqlite 其实是不支持删除列的方法的。
     2. 网上还有人想利用:a. 创建新表
 		       b. 导入数据
		       c. 删除旧表并更改表名
	此种方法同样不可行,因为在创建表的同时,原先旧表中的primary key 的约束条件(其他约束条件没试)被无形的过滤掉了。
      
测试如下: 我的数据库中有一个表:
          sqlite> .schema
          CREATE TABLE Orders(Id_O int primary key , OrderNo int ,Id_P int ,idd text); 
          (NOTE: idd 这一列是我想要删除的)   
数据内容如下: 
          sqlite> .headers on
          sqlite> .nullvalue NULL   
          sqlite> select *from Orders ;  (目的是显示列名,和让空值的地方显示NULL)
                  Id_O | OrderNo | Id_P | idd
                  1    |  77895  |  3   | NULL
                  2    |  44678  |  3   | NULL
                  3    |  22456  |  1   | NULL
                  4    |  24562  |  1   | NULL
                  5    |  34764  |  65  | NULL
          sqlite> create table tempOrders as select Id_O, OrderNo, Id_P from Orders;  
          sqlite> select *from tempOrders;
       
                  Id_O | OrderNo | Id_P
                  1    | 77895   |  3
                  2    | 44678   |  3
                  3    | 22456   |  1
                  4    | 24562   |  1
                  5    | 34764   |  65
表面上看起来好像没有问题,其实约束条件已经不存在了,let check it;
          sqlite> .schema 
      
                  CREATE TABLE Orders(Id_O int primary key , OrderNo int , Id_P int , idd text);
                  CREATE TABLE tempOrders(Id_O INT , OrderNo INT , Id_P INT);
解决方法:
      1. 备份数据Orders数据到.csv文件
         在导出之前,需要关闭headers off, csv里面就没有列名信息了,方便导入到后面的finalOrders表
          sqlite> .headers off
          sqlite> .output temp.csv
          sqlite>  select Id_O ,OrderNo ,Id_P from Orders;
          sqlite>  .output stdout
现在temp.csv文件中保存了Orders的数据
      2. 导入数据到表
          sqlite> create table finalOrders(Id_O int primary key ,OrderNo int ,Id_P int);
          sqlite> .import temp.csv finalOrders
      3. 数据已经导入完成,check it ;
          sqlite> .headers on
          sqlite> select *from finalOrders;
                  Id_O | OrderNo | Id_P
                  1    |  77895  |  3
                  2    |  44678  |  3
                  3    |  22456  |  1
                  4    |  24562  |  1
                  5    |  34764  |  65
           看看约束条件,是否依然在,
          sqlite> .schema
                  CREATE TABLE finalOrders(Id_O int primary key , OrderNo int ,Id_P int);
          sqlite> drop table Orders;
          sqlite> alter table finalOrders rename to Orders;
          搞定!转载请注明出处,混点人气也算是对我辛苦的奖励吧!!!
 
 
  
 
 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值