加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

更改SQLite列类型并添加PK约束

发布时间:2020-12-12 19:10:29 所属栏目:百科 来源:网络整理
导读:如何更改SQLite表中列的类型? 我有: CREATE TABLE table( id INTEGER,salt TEXT NOT NULL UNIQUE,step INT,insert_date TIMESTAMP ); 我想将salt的类型更改为仅将TEXT和id的类型更改为INTEGER PRIMARY KEY. 以下是SQLite手册的一个摘录,讨论了ALTER TABLE
如何更改SQLite表中列的类型?

我有:

CREATE TABLE table(
        id INTEGER,salt TEXT NOT NULL UNIQUE,step INT,insert_date TIMESTAMP
    );

我想将salt的类型更改为仅将TEXT和id的类型更改为INTEGER PRIMARY KEY.

以下是SQLite手册的一个摘录,讨论了ALTER TABLE命令(参见URL: SQLite Alter Table):

SQLite supports a limited subset of
ALTER TABLE. The ALTER TABLE command
in SQLite allows the user to rename a
table or to add a new column to an
existing table. It is not possible to
rename a colum,remove a column,or
add or remove constraints from a
table.

在手动状态下,不可能修改列的类型或约束,例如将NULL转换为NOT NULL.但是,有一个工作

>将旧表复制到临时表中,
>创建一个根据需要定义的新表,
>将数据从临时表复制到新表.

在信用到期的信用额度上,我从对bitbucket.org的hakanw的django-email-usernames项目的问题#1的讨论中了解了这一点.

CREATE TABLE test_table(
    id INTEGER,insert_date TIMESTAMP
);

ALTER TABLE test_table RENAME TO test_table_temp;

CREATE TABLE test_table(
    id INTEGER PRIMARY KEY,salt TEXT,insert_date TIMESTAMP
);

INSERT INTO test_table SELECT * FROM test_table_temp;

DROP TABLE test_table_temp;

笔记

>我使用表名test_table,因为如果您尝试将表命名为表,SQLite将会生成错误.>如果您的数据不符合新的表约束,则INSERT INTO命令将失败.例如,如果原始的test_table包含两个具有相同整数的id字段,则在执行“INSERT INTO test_table SELECT * FROM test_table_temp”时将收到“SQL错误:PRIMARY KEY必须是唯一的”命令.>对于所有测试,我使用SQLite版本3.4.0作为Python 2.6.2的一部分运行在我的13“Unibody MacBook与Mac OS X 10.5.7.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读