文章目录

  • 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无法直接怼已经存在的列进行修改;如果要修改已经存在的列,那么可以使用如下的方法:

  1. 重命名表。
  2. 重新创建表。
  3. 插入旧表中的数据。
  4. 删除旧的表。

下面使用例子来说明整个过程。

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 修改表的列相关推荐

  1. mysql修改表和列

    mysql修改列 mysql增加列,修改列名.列属性,删除列语句 mysql修改表名,列名,列类型,添加表列,删除表列   alter table test rename test1; --修改表名 ...

  2. sqlite 修改表名,合并数据库(文件)

    修改表名:ALTER TABLE orig_table_name RENAME TO tmp_table_name; 将某个数据库的一个表的数据插入到另一个数据库的某个表里:1.先连接数据库A2.再a ...

  3. 2. 表的操作:创建表、修改表、列约束和表约束、数据操作、删除表

    文章目录 表的操作 1. 表的创建[CREATE TABLE 表名] 2. 使用T-SQL语句修改表(修改列的属性.增加列.删除列) 3. 列约束和表约束 4. 表数据操作(insert.update ...

  4. oracle修改表某列字段长度

    1.修改一个列 alter table 表名 modify name varchar2(60); 2.修改多个列 alter table 表名 modify (name varchar(60),nam ...

  5. (数据库-MySQL)修改表——添加列、修改列、删除列(名)

    对于数据表的修改,我们通常会使用如下操作:添加列(add).修改列(modify).修改列名(change).删除列(drop).修改表名(rename).修改表的字符集. 1.添加列(add) al ...

  6. mysql 修改某列数据_mysql修改表某列数据问题

    2012-11-02 回答 下面列出: 1.增加一个字段 alter table user add column new1 varchar(20) default null; //增加一个字段,默认为 ...

  7. mysql批量生成修改表和列注释语句

    当我们在一个数据库修改完备注后,需要将其导致另一个服务器上的数据库中,需要生成批量执行语句,方便操作,注意用change 或modified 进行列的属性修改时,没有写全的话会造成其它属性的丢失,如 ...

  8. 22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束

    我们的情绪背后藏着动机,动机总是正面的,因为意识从来不会伤害自己,只是误以为某些行为可以满足自己的这份动机. 结果去重 distinct select distinct 字段列表 from 表名称 [ ...

  9. oracle r修改表名,oracle中修改表名

    <<>> answer1: ALTER TABLE old_table_name RENAME TO new_table_name;(大写为系统命令) answer2: SQL ...

最新文章

  1. Django 笔记-20190521
  2. oracle创建函数语句,Oracle 创建函数与存储过程语句积累
  3. oracle数据库的性能测试工具有哪些,使用Oracle性能测试工具swingbench测试instance caging...
  4. subList生成的列表和原列表的对比
  5. Django(五)中间件
  6. Mysql 格式化日期格式
  7. 华为隐藏功能扩大内存代码大全_发现将华为手机这3个功能打开,竟然可以将手机性能极限发挥...
  8. MAC 升级 node.js 的快捷方法
  9. FW:星巴客装B指南
  10. ie8 升级页面html,ie7浏览器怎么升级到ie8?
  11. LPDDR4协议规范之 (四)命令和时序
  12. 008_SSSS_ Improved Denoising Diffusion Probabilistic Models
  13. Nginx神来之笔,提高并发原来如此简单
  14. AI训练营金融风控学习笔记
  15. # Pedometer 计步器算法简介
  16. 选全尺寸还是非全尺寸备胎,这里面学问可大着呢
  17. 抖音封禁4000个炫富账号,抖音开始严厉打击丨国仁网络
  18. 帆软的数知鸟是一个什么东西
  19. 【HTML操作指南】
  20. 三菱modbusRTU通讯实例_实例 | 图文详解威纶触摸屏与三菱D700变频器通讯

热门文章

  1. python3 中怎么把类似这样的'\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82'转换成汉字输出
  2. Azure系列2.1.3 —— BlobEncryptionPolicy
  3. Android组件化与插件化开发项目实战整理分享(含支付宝、360、美团、滴滴等大厂项目实战)
  4. 在Ubuntu 9.04/9.10 桌面版上安装 Open-Xchange 社区开源免费版--2009.12.23--北京守望小方翻译+实际操作...
  5. java学习之编程逻辑训练
  6. python瓦片图下载/合并/绘图/标记
  7. STM32F1与STM32CubeIDE快速入门-ADC通过DMA方式与PWM实现调光器
  8. Cadence Allegro快捷键设置教程——随心应手,画图神速!秒变高手
  9. 2022年注册安全工程师安全生产专业实务(煤矿安全)考试模拟试题卷及答案
  10. C语言:Unix时间戳-转-UTC时间