SQLlite:奇怪的是“因违反约束而中止”

时间:2015-11-30 09:09:16

标签: sqlite

我正在尝试重命名表的一列。我有很多带有“couleur”字样的表格,我将“手动”重命名为“bulle”。

我已成功将main_groupecouleurs重命名为main_groupebulles。现在我正在研究main_groupe。我正在尝试将groupe_couleurs_id重命名为groupe_bulles_id

SQL非常自我解释:

BEGIN TRANSACTION;
DROP INDEX main_groupe_fc5cee5b;
CREATE TABLE main_groupe7e12
(
    id INTEGER PRIMARY KEY NOT NULL,
    description TEXT NOT NULL,
    exemple TEXT,
    groupe_bulles_id INTEGER DEFAULT NULL,
    reference TEXT,
    FOREIGN KEY (groupe_bulles_id) REFERENCES main_groupebulles(id)
        DEFERRABLE INITIALLY DEFERRED
);
CREATE UNIQUE INDEX main_groupe_fc5cee5b ON main_groupe7e12 (groupe_bulles_id);
INSERT INTO main_groupe7e12(id, description, exemple, groupe_bulles_id, reference)
                     SELECT id, description, exemple, groupe_couleurs_id, reference
                     FROM main_groupe;
DROP TABLE main_groupe;
ALTER TABLE main_groupe7e12 RENAME TO main_groupe;
COMMIT;

当我运行它时,我得到:

[SQLITE_CONSTRAINT]  Abort due to constraint violation
    (UNIQUE constraint failed: main_groupe7e12.groupe_bulles_id)

这意味着(我想我错了,但我不知道我错过了什么)它试图在引用表中插入一些groupe_couleurs_id(= main_groupebulles)。因此,我试图在原始表中看到问题:

SELECT * FROM main_groupe WHERE groupe_couleurs_id NOT IN (
    SELECT id FROM main_groupebulles
);

没有行!我错过了什么?

1 个答案:

答案 0 :(得分:3)

您的UNIQUE列上有groupe_bulles_id索引,但根据评论,该列的许多有效重复值来自main_groupe.groupe_couleus_id并导致违反约束

由于您需要重复值,请从UNIQUE中删除CREATE UNIQUE INDEX ...