sqlite 修改表的列
文章目录
- sqlite 修改表的列
- 1. 问题的引入
- 2. ALTER命令
- 2.1 表重命名
- 2.2 新增列
- 3. 重建表修改列
- 3.1 重命名表
- 3.2 重新创建表
- 3.3 插入数据
- 3.4 删除旧的表
- 4. 总结
sqlite 修改表的列
软件都是在不断的升级和变化的,在软件的世界列唯一不变的就是变化;同样对于数据库来讲,也存在一个数据库升级或者降级的问题,本文来讨论一下SQLITE数据库表列修改的方法。
1. 问题的引入
假如在我们的项目数据库中存在一个表叫做COMPANY,记录公司所有的员工信息,创建表的代码如下:
CREATE TABLE IF NOT EXISTS COMPANY(ID PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INTEGER NOT NULL,ADDRESS TEXT NOT NULL,PHONE INTEGER NOT NULL
);
创建完成表之后,我们查看表的结构信息,如下:
sqlite> .schema company
CREATE TABLE COMPANY(ID PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INTEGER NOT NULL,ADDRESS TEXT NOT NULL,PHONE INTEGER NOT NULL
);
接着我们向表中存放几个员工信息:
INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE) VALUES(0, 'JACK', 20, 'BEIJING', '123456789');INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE) VALUES(1, 'TOM', 21, 'SHANGHAI', '12332145678');
插入之后的数据如下:
sqlite> SELECT * FROM COMPANY;
ID|NAME|AGE|ADDRESS|PHONE
0|JACK|20|BEIJING|123456789
1|TOM|21|SHANGHAI|12332145678
突然,我们在员工入职的时候发现了一个问题,一个员工的手机号是这种"0755-67899876", 显然这种情况无法使用INTEGER来存储了,我们需要对表进行升级,那么应该怎么办呢?
2. ALTER命令
最先想到的命令就是ALTER命令修改边,我们看下SQLITE的这个命令有什么功能:
SQLite 的 ALTER TABLE 命令不通过执行一个完整的转储和数据的重载来修改已有的表。您可以使用 ALTER TABLE 语句重命名表,使用 ALTER TABLE 语句还可以在已有的表中添加额外的列。
在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作。
也就是sqlite中支持如下的操作:
CREATE TABLE TEST(ID INTEGER PRIMARY KEY NOT NULL,AGE INTEGER NOT NULL
);
2.1 表重命名
重命名表的语法如下:
ALTER TABLE database_name.table_name RENAME TO new_table_name;
重命名的过程如下:
sqlite> .tables
COMPANY TESTsqlite> ALTER TABLE TEST RENAME TO TESTBAK;sqlite> .tables
COMPANY TESTBAK
2.2 新增列
语法如下:
ALTER TABLE database_name.table_name ADD COLUMN column_def...;
执行过程如下:
sqlite> ALTER TABLE TESTBAK ADD COLUMN NAME TEXT NOT NULL;
sqlite> .schema testbak
CREATE TABLE IF NOT EXISTS "TESTBAK"(ID INTEGER PRIMARY KEY NOT NULL,AGE INTEGER NOT NULL
, NAME TEXT NOT NULL);
3. 重建表修改列
显然,从上面的分析我们可以看出,SQLITE无法直接怼已经存在的列进行修改;如果要修改已经存在的列,那么可以使用如下的方法:
- 重命名表。
- 重新创建表。
- 插入旧表中的数据。
- 删除旧的表。
下面使用例子来说明整个过程。
3.1 重命名表
执行过程如下:
sqlite> ALTER TABLE COMPANY RENAME TO COMPANY_TMP;sqlite> .tables
COMPANY_TMP TESTBAK
3.2 重新创建表
使用CREATE TABLE COMPANY
重新创建表:
CREATE TABLE COMPANY(ID PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INTEGER NOT NULL,ADDRESS TEXT NOT NULL,PHONE TEXT NOT NULL
);
3.3 插入数据
INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE)
SELECT ID, NAME, AGE, ADDRESS, PHONE
FROM COMPANY_TMP;
插入数据之后的表内容如下:
sqlite> SELECT * FROM COMPANY;
ID|NAME|AGE|ADDRESS|PHONE
0|JACK|20|BEIJING|123456789
1|TOM|21|SHANGHAI|12332145678
3.4 删除旧的表
sqlite> DROP TABLE COMPANY_TMP;
sqlite> .tables
COMPANY TESTBAK
4. 总结
SQLITE不支持修改已经存在的列的属性,如果需要修改可以使用重新创建表的方式来完成。
sqlite 修改表的列相关推荐
- mysql修改表和列
mysql修改列 mysql增加列,修改列名.列属性,删除列语句 mysql修改表名,列名,列类型,添加表列,删除表列 alter table test rename test1; --修改表名 ...
- sqlite 修改表名,合并数据库(文件)
修改表名:ALTER TABLE orig_table_name RENAME TO tmp_table_name; 将某个数据库的一个表的数据插入到另一个数据库的某个表里:1.先连接数据库A2.再a ...
- 2. 表的操作:创建表、修改表、列约束和表约束、数据操作、删除表
文章目录 表的操作 1. 表的创建[CREATE TABLE 表名] 2. 使用T-SQL语句修改表(修改列的属性.增加列.删除列) 3. 列约束和表约束 4. 表数据操作(insert.update ...
- oracle修改表某列字段长度
1.修改一个列 alter table 表名 modify name varchar2(60); 2.修改多个列 alter table 表名 modify (name varchar(60),nam ...
- (数据库-MySQL)修改表——添加列、修改列、删除列(名)
对于数据表的修改,我们通常会使用如下操作:添加列(add).修改列(modify).修改列名(change).删除列(drop).修改表名(rename).修改表的字符集. 1.添加列(add) al ...
- mysql 修改某列数据_mysql修改表某列数据问题
2012-11-02 回答 下面列出: 1.增加一个字段 alter table user add column new1 varchar(20) default null; //增加一个字段,默认为 ...
- mysql批量生成修改表和列注释语句
当我们在一个数据库修改完备注后,需要将其导致另一个服务器上的数据库中,需要生成批量执行语句,方便操作,注意用change 或modified 进行列的属性修改时,没有写全的话会造成其它属性的丢失,如 ...
- 22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束
我们的情绪背后藏着动机,动机总是正面的,因为意识从来不会伤害自己,只是误以为某些行为可以满足自己的这份动机. 结果去重 distinct select distinct 字段列表 from 表名称 [ ...
- oracle r修改表名,oracle中修改表名
<<>> answer1: ALTER TABLE old_table_name RENAME TO new_table_name;(大写为系统命令) answer2: SQL ...
最新文章
- Django 笔记-20190521
- oracle创建函数语句,Oracle 创建函数与存储过程语句积累
- oracle数据库的性能测试工具有哪些,使用Oracle性能测试工具swingbench测试instance caging...
- subList生成的列表和原列表的对比
- Django(五)中间件
- Mysql 格式化日期格式
- 华为隐藏功能扩大内存代码大全_发现将华为手机这3个功能打开,竟然可以将手机性能极限发挥...
- MAC 升级 node.js 的快捷方法
- FW:星巴客装B指南
- ie8 升级页面html,ie7浏览器怎么升级到ie8?
- LPDDR4协议规范之 (四)命令和时序
- 008_SSSS_ Improved Denoising Diffusion Probabilistic Models
- Nginx神来之笔,提高并发原来如此简单
- AI训练营金融风控学习笔记
- # Pedometer 计步器算法简介
- 选全尺寸还是非全尺寸备胎,这里面学问可大着呢
- 抖音封禁4000个炫富账号,抖音开始严厉打击丨国仁网络
- 帆软的数知鸟是一个什么东西
- 【HTML操作指南】
- 三菱modbusRTU通讯实例_实例 | 图文详解威纶触摸屏与三菱D700变频器通讯
热门文章
- python3 中怎么把类似这样的'\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82'转换成汉字输出
- Azure系列2.1.3 —— BlobEncryptionPolicy
- Android组件化与插件化开发项目实战整理分享(含支付宝、360、美团、滴滴等大厂项目实战)
- 在Ubuntu 9.04/9.10 桌面版上安装 Open-Xchange 社区开源免费版--2009.12.23--北京守望小方翻译+实际操作...
- java学习之编程逻辑训练
- python瓦片图下载/合并/绘图/标记
- STM32F1与STM32CubeIDE快速入门-ADC通过DMA方式与PWM实现调光器
- Cadence Allegro快捷键设置教程——随心应手,画图神速!秒变高手
- 2022年注册安全工程师安全生产专业实务(煤矿安全)考试模拟试题卷及答案
- C语言:Unix时间戳-转-UTC时间