我在 python 中使用 sqlite3。我有两个表,每个表中都有 id 列。表中的这些 id 列可以有不同的值。我想创建一个包含列 id 的新表,它可以通过组合前两个表的 id 列中的值来仅包含值。我能够使用表中的任何一个成功创建外键(链接),但不能同时使用两者。我还尝试从两个表创建连接 View ,并尝试将第三个表与连接连接起来,但没有成功。
请您参考如下方法:
您可以使用触发器在来自两个不同表的列的并集上创建等效的外键。您需要为受限表的插入和更新以及引用表的更新和删除创建触发器。如果我没有遗漏任何东西,您总共需要六个触发器。
请参阅此链接,其中作者几乎告诉您如何执行此操作,因为它是在 sqlite 开始强制执行外键之前编写的:
http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
例如,这将是约束表的 INSERT 触发器,其中约束表是 foo , 引用表为 bar1和 bar2`:
pragma foreign_keys=on;
create table bar1 (id integer primary key);
create table bar2 (id integer primary key);
insert into bar1 values (1);
insert into bar1 values (2);
insert into bar2 values (2);
insert into bar2 values (3);
create table foo (id integer);
CREATE TRIGGER fk_insert_foo
BEFORE INSERT ON foo
FOR EACH ROW
BEGIN
SELECT RAISE(ROLLBACK, 'insert on table foo violates foo.id '
+ 'constraint on union of bar1.id and bar2.id')
WHERE NOT (EXISTS (SELECT * FROM bar1 WHERE bar1.id=NEW.id)
OR
EXISTS (SELECT * FROM bar2 WHERE bar2.id=NEW.id));
END;
insert into foo values (1);
insert into foo values (2);
insert into foo values (3);
select * from foo;
insert into foo values (4); # <<<<<< this fails
