【问题标题】:Altering a column on SQLite after definition在 SQLite 中更改我的数据类型
【发布时间】:2014-03-02 17:05:00
【问题描述】:

我正在关注一个 SQLite 教程,其目标是从 UML 图创建一个简单的学生数据库。

所以最近我正在经历地狱,试图弄清楚如何改变我的数据类型,我希望这会有所帮助。我将发布与教师相同的问题。

不幸的是,我在尝试跟随讲师时弄乱了我的数据类型。 视频,如果有帮助,可以在这里找到:http://www.youtube.com/watch?v=07nBszNiwU8

++BEGIN TRANSCRIPT++


感谢您迄今为止的所有帮助,但我似乎还有另一个谜团。我做的第一件事是复制你的 UML,然后休息一下。返回后,我想我会在重新加载您的视频时从 UML 开始,所以我做的第一件事就是创建 student 和 sex_type 表:

sqlite> create table student(name VARCHAR(23),
   ...> sex CHARACTER(1),
   ...> id_number INTEGER PRIMARY KEY);

sqlite> create table sex_type(sex_id TEXT PRIMARY KEY, sex_type INTEGER);

但后来我意识到,“糟糕,我忘了指出我希望 sex_id 也不是 NULL。”

“我也忘记了确保外键(sex)引用sex_type(sex_id)。”

带着这样的想法,我回顾了我的 SQL 书籍,并回忆了一些被称为 ALTER 命令的东西。但是,无论我如何切片,我都会得到以下几点:

sqlite> alter table sex_type MODIFY column sex_id TEXT PRIMARY KEY NOT NULL;

Error: near "MODIFY": syntax error

sqlite> alter table sex_type CHANGE column sex_id TEXT PRIMARY KEY NOT NULL;**

Error: near "CHANGE": syntax error

sqlite> alter table sex_type drop sex_id;

Error: near "DROP": syntax error

总是出现相同的假定语法错误。关于今晚唯一有效的方法:

sqlite> alter table sex_type RENAME TO gender;

sqlite> alter table gender_id RENAME TO sex_type;

那么我忽略的这个语法错误是什么,因为按照我的书来看,我的语法应该没问题。在进行修改之前我是否必须在这些列中插入一些东西(诚然,我还没有尝试过)?还是我遗漏了一些关于 ALTER/MODIFY/CHANGE/DROP 命令的明显内容?

【问题讨论】:

标签: sql sqlite create-table alter-table


【解决方案1】:

SQLite 对ALTER TABLE 的支持非常有限,including only RENAME TO and ADD_COLUMN。您收到语法错误是因为您发出的命令不受支持。

如果您没有任何数据要丢失,最好删除并重新创建表。

如果确实要丢失数据,最好重命名表并使用INSERT with SELECT 创建替换,如this example 所示。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2011-10-31
    • 2018-07-23
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多