2014-01-27 108 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'编译指示。 –

相关问题