删除sqlite数据库中列的唯一约束

时间:2017-02-02 22:11:13

标签: sql sqlite constraints

我正在尝试删除sqlite的列上的UNIQUE约束,但我没有删除约束的名称。如何找到UNIQUE约束名称的名称以将其删除。

下面是我想要删除约束的表格所见的模式

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)
);

2 个答案:

答案 0 :(得分:8)

SQLite仅支持limited ALTER TABLE,因此您无法使用ALTER TABLE删除constaint。 “删除”列可以做的是重命名表,使用除UNIQUE约束之外的相同模式创建新表,然后将所有数据插入到新表中。此过程记录在ALTER TABLE文档的进行其他种类的表模式更改部分。

答案 1 :(得分:0)

我自己碰到了这个。一个简单的解决方案是使用DB Browser for SQLite

它使我仅使用gui中的复选框即可删除唯一约束。