2

我在 python 中使用 sqlite3。我有两个表,每个表都有 id 列。表中的这些 id 列可以具有不同的值。我想通过组合前两个表的 id 列中的值来创建一个带有列 id 的新表,该表只能包含值。我能够使用任何一个表成功创建外键(链接),但不能同时使用两者。我还尝试从两个表创建连接视图,并尝试将第三个表与连接链接,但没有奏效。

4

1 回答 1

1

您可以使用触发器在来自两个不同表的列的联合上创建等效的外键。您需要为受约束表上的插入和更新以及引用表上的更新和删除创建触发器。如果我没有遗漏任何东西,您总共需要六个触发器。

请参阅此链接,其中作者几乎告诉您如何做到这一点,因为它是在 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
于 2012-04-07T15:43:33.940 回答