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; 搞定!转载请注明出处,混点人气也算是对我辛苦的奖励吧!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |