我正在尝试重命名表的一列。我有很多带有“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
);
我没有行!我错过了什么?
答案 0 :(得分:3)
您的UNIQUE
列上有groupe_bulles_id
索引,但根据评论,该列的许多有效重复值来自main_groupe.groupe_couleus_id
并导致违反约束
由于您需要重复值,请从UNIQUE
中删除CREATE UNIQUE INDEX ...
。