2014-01-27 150 views
0

我已經找了答案,但也許我想念一些東西。 我有2個表格見下文。第一個表中的實體是從第二個表中引用的,但是當我嘗試從第二個表中刪除時,我獲得了Error: foreign key mismatch。有觸發器(不在這裏顯示),但它們與DELETEcmdauth無關。我不明白爲什麼不能刪除行?爲什麼不能從表格中刪除參考另一個

CREATE TABLE app (name TEXT, script TEXT, PRIMARY KEY(name)); 
CREATE TABLE env (name TEXT, PRIMARY KEY(name)); 
CREATE TABLE role (name TEXT, command TEXT, PRIMARY KEY(name,command)); 

CREATE TABLE cmdauth (groupname TEXT, rolename TEXT, appname TEXT, envname TEXT, FOREIGN KEY (appname) REFERENCES app(name), FOREIGN KEY (rolename) REFERENCES role(name), FOREIGN KEY (envname) REFERENCES env(name), PRIMARY KEY (groupname,rolename,appname,envname)); 

sqlite> select * from cmdauth where appname='app1' and groupname='admin' and envname='test' and rolename='restarter'; 
admin|restarter|app1|test 
sqlite> delete from cmdauth where appname='app1' and groupname='admin' and envname='test' and rolename='restarter'; 
Error: foreign key mismatch 

謝謝你的幫忙!

回答

2

documentation說:

通常,一個外鍵約束的父鍵是父表的主鍵。如果它們不是主鍵,那麼父鍵列必須共同受到UNIQUE約束或具有UNIQUE索引。

這一要求得不到滿足的參考role(name)

+0

謝謝,這是我的錯。我想知道如何將數據插入到'cmdauth'中......也許我沒有用戶'foreign_keys = ON'編譯指示。 –

相關問題