2017-02-02 62 views
0

我想删除sqlite的列上的唯一约束,但我没有名称来删除约束。我如何找到UNIQUE约束名称的名称来删除它。删除sqlite数据库中的列的唯一约束

下面是模式我看到桌上我想删除约束

UNIQUE (datasource_name)

sqlite> .schema datasources 
CREATE TABLE "datasources" (
    created_on DATETIME NOT NULL, 
    changed_on DATETIME NOT NULL, 
    id INTEGER NOT NULL, 
    datasource_name VARCHAR(255), 
    is_featured BOOLEAN, 
    is_hidden BOOLEAN, 
    description TEXT, 
    default_endpoint TEXT, 
    user_id INTEGER, 
    cluster_name VARCHAR(250), 
    created_by_fk INTEGER, 
    changed_by_fk INTEGER, 
    "offset" INTEGER, 
    cache_timeout INTEGER, perm VARCHAR(1000), filter_select_enabled BOOLEAN, params VARCHAR(1000), 
    PRIMARY KEY (id), 
    CHECK (is_featured IN (0, 1)), 
    CHECK (is_hidden IN (0, 1)), 
    FOREIGN KEY(created_by_fk) REFERENCES ab_user (id), 
    FOREIGN KEY(changed_by_fk) REFERENCES ab_user (id), 
    FOREIGN KEY(cluster_name) REFERENCES clusters (cluster_name), 
    UNIQUE (datasource_name), 
    FOREIGN KEY(user_id) REFERENCES ab_user (id) 
); 

回答

3

的SQLite只支持limited ALTER TABLE,所以你不能删除使用ALTER TABLE的constaint。你可以做什么来“删除”该列是重命名该表,使用除UNIQUE约束之外的相同模式创建一个新表,然后将所有数据插入到新表中。此过程记录在制作其他种类的表格模式变更部分的ALTER TABLE文档。