如何更改SQLite表中列的类型?
我有:
CREATE TABLE table(
id INTEGER,
salt TEXT NOT NULL UNIQUE,
step INT,
insert_date TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
我想将salt's类型改为just TEXT和id的类型为INTEGER PRIMARY KEY.
Mat*_*kin 27
以下是讨论ALTER TABLE命令的SQLite手册的摘录(参见URL:SQLite Alter Table):
SQLite支持ALTER TABLE的有限子集.SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列.无法重命名列,删除列,或从表中添加或删除约束.
如手册所述,无法修改列的类型或约束,例如将NULL转换为NOT NULL.但是,有一个工作
为了给予信用到期的信用,我从bitbucket.org上关于hakanw的django-email-usernames项目的问题#1的讨论中学到了这一点.
CREATE TABLE test_table(
id INTEGER,
salt TEXT NOT NULL UNIQUE,
step INT,
insert_date TIMESTAMP
);
ALTER TABLE test_table RENAME TO test_table_temp;
CREATE TABLE test_table(
id INTEGER PRIMARY KEY,
salt TEXT,
step INT,
insert_date TIMESTAMP
);
INSERT INTO test_table SELECT * FROM test_table_temp;
DROP TABLE test_table_temp;
Run Code Online (Sandbox Code Playgroud)
笔记
test_table因为如果您尝试将表命名为SQLite,SQLite将生成错误table.INSERT INTO如果您的数据不符合新表约束,则该命令将失败.例如,如果原始test_table包含两个id具有相同整数的字段,则SQL error: PRIMARY KEY must be unique在执行" INSERT INTO test_table SELECT * FROM test_table_temp;"命令时将收到" ".在这种情况下,您可以将salt设为可为空并删除唯一约束。另外,如果id列不包含任何空值或重复值,您可以使用 SQL Server Management Studio 安全地将其设为主键。下面是屏幕截图。希望它更清楚: 替代文本http://img265.imageshack.us/img265/7418/91573473.png
或使用以下sql:
alter table <TableName> modify salt text null
alter table <TableName> drop constraint <Unique Constraint Name>
alter table <TableName> modify id int not null
alter table <TableName> add constraint pk<Table>d primary key (id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16662 次 |
| 最近记录: |