加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite 删除列

发布时间:2020-12-12 20:14:01 所属栏目:百科 来源:网络整理
导读:1. 看到网上说利用:alter table table_name drop column col_name ; Sqlite 其实是不支持删除列的方法的。 2. 网上还有人想利用:a. 创建新表 b. 导入数据 c. 删除旧表并更改表名 此种方法同样不可行,因为在创建表的同时,原先旧表中的primary key 的约束条
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,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,Id_P from Orders;
          sqlite>  .output stdout
现在temp.csv文件中保存了Orders的数据
      2. 导入数据到表
          sqlite> create table finalOrders(Id_O int primary key,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,Id_P int);
          sqlite> drop table Orders;
          sqlite> alter table finalOrders rename to Orders;
          搞定!转载请注明出处,混点人气也算是对我辛苦的奖励吧!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读