我一直在寻找答案,但也许我错过了一些东西。
我有 2 个表,如下所示。第一个表中的实体是从第二个表中引用的,但是当我尝试从第二个表中删除时,我得到Error: foreign key mismatch
。有触发器(此处未显示),但它们与DELETE
or cmdauth
。我不明白为什么不能删除行?
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
感谢您的帮助!
The 文档 http://www.sqlite.org/foreignkeys.html#fk_indexes says:
通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受到 UNIQUE 约束或具有 UNIQUE 索引。
参考文献不满足此要求role(name)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)