在SQLite中更改我的数据类型

时间:2014-02-05 23:59:19

标签: sql sqlite create-table alter-table

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

最近我正在通过HELL试图弄清楚如何改变我的数据类型,我希望这可以提供帮助。我将发布与教师发布的相同问题。

不幸的是,当我试图跟随教师时,我搞砸了我的数据类型。 视频(如果有帮助)可以在此处找到:http://www.youtube.com/watch?v=07nBszNiwU8

++ BEGIN TRANSCRIPT ++


到目前为止,感谢您的所有帮助,但似乎我还有另一个谜。我做的第一件事是复制你的UML,然后休息一下。回来后,我想我会在重新加载你的视频时从UML开始,所以我做的第一件事就是创建学生和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_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命令的明显内容?

1 个答案:

答案 0 :(得分:3)

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

如果您没有丢失任何数据,最好放弃并重新创建表格。

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