SQLite - 改变表的列类型?

Nic*_*k_F 34 sqlite sqlitemanager

我正在启动一个涉及小型数据库的项目,我正在考虑使用SQLite.如果我创建一个表并将其中一个列定义为文本,但存储的所有值都是整数 - 有没有办法更改列的数据类型?我正在使用SQLite Manager,我找不到允许我这样做的功能.我可以使用SQL命令执行此操作,还是SQLite的限制?也许,即使有这个限制,人们也可以找到一些方法来创建一个包含所需列类型的新表,然后将数据导入其中.

问候,尼克

zee*_*zee 45

SQLite不完全支持ALTER TABLE语句.您唯一能做的就是重命名表和/或添加列.如果要重命名列,最好的选择是使用新列datatype/names创建一个新表,并删除旧表以重命名新表.

可以说,你有一个表,需要将"field-1"重命名为"field-2":首先== >>重命名旧表:

    ALTER TABLE original RENAME TO tmp;
Run Code Online (Sandbox Code Playgroud)

现在基于旧表创建新表,但使用更新的列名:
== >>创建一个包含更新列的表

    CREATE TABLE original(
    field_a INT
   , field_b INT
    );
Run Code Online (Sandbox Code Playgroud)

然后从原始表中复制内容.

   INSERT INTO origignal(field_a, field_b)
   SELECT field_a, field_b
   FROM tmp;
Run Code Online (Sandbox Code Playgroud)

最后,放下旧桌子.

   DROP TABLE tmp;
Run Code Online (Sandbox Code Playgroud)

  • 此外,在一个事务中执行此操作. (13认同)
  • 您可以按其他顺序执行此操作:使用临时名称创建新表,将所有内容复制到新表,然后删除旧表并将新表重命名为其原始名称.然后,您只需要在最后的drop-rename操作周围进行短期事务,而不是围绕所有事务进行长事务处理. (4认同)
  • 这是不正确的顺序。看这个!https://sqlite.org/lang_altertable.html (2认同)

Bla*_*rai 5

不,没有"快速"的方法来使用SQLite.不像你可以使用MySQL.您将不得不删除该表,然后重新添加它.

另外要记住的是,SQLite对于可以放入每个部分的数据类型非常灵活.以下是描述数据类型及其工作原理的链接:http://www.sqlite.org/datatype3.html

另一个选择可能是使用MySQL,如果您所说的功能对您来说是一个大问题.它仍然是免费的,非常适合小型项目.