2017-02-02 102 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文檔。