我在python中使用sqlite3。我有两个ID列的每个表中。表中的这些id列可以具有不同的值。我想创建一个新的表,其中列ID只能通过组合前两个表的ID列中的值来包含值。我能够成功创建任何一个表的外键(链接),但不能同时使用两者。我也尝试从这两个表创建一个连接视图,并尝试将第三个表与连接关联起来,但没有起作用。在sqlite3引用(外键)中,通过在其他两个表中连接两列来实现表的一列
回答
可以使用触发器在两个不同表的列的并集上创建外键的等效项。您需要为约束表上的插入和更新以及引用表上的更新和删除创建触发器。如果我没有遗漏任何东西,总共需要六个触发器。
请参阅此链接在这里笔者几乎将告诉您如何做到这一点,因为它被写入之前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
谢谢, 有用。虽然,这种方法有一个缺点foo表不会显示任何与bar1和bar2的链接 – 2012-04-07 18:22:15
我主要与你有关(即没有ORM自动检测链接),但根据什么FK是为sqlite,那里只能是一个引用(即父)表每个FK:http://www.sqlite.org/syntaxdiagrams.html#foreign-key-clause – 2012-04-07 18:32:33
我创建了一个新表,并添加了一个代码来自动插入或删除其中的数据如果bar1或bar2插入或删除发生。这将始终保持此表更新,然后将foo链接到它。 – 2012-04-08 03:08:17
- 1. 在Python中,如何通过键列来连接两个数组?
- 2. 如何通过引用其他两列在Python Dataframe中创建一个新列?
- 3. 从两个连接的表中选择一个表中的一列由另一个表中的两个引用
- 4. 更改其他表中外键引用的表的主键列
- 5. 通过连接一个或两个其他表
- 6. 在ExtJS中实现两个列表
- 7. 将两个列表连接在一起
- 8. 如何在一个表中连接两个表的列?
- 9. 无法使用两个外键创建连接表sqlite3
- 10. Mysql外键引用两个列,它们是两个不同表中的主键
- 11. LINQ合并两个列表(在组合键全外连接)
- 12. 有没有办法让一个表有两列是外键引用两个其他表?
- 13. 将一个表中的一列与另外两个表中的其他列结合起来sql
- 14. 如何将两列(同一表)引用到其他表的一列中
- 15. 在SQL中的表上连接两列
- 16. 如何使用jpa在一个表中实现两个序列
- 17. 带有两列的MySQL索引,其中一列是外键
- 18. 来自一个表的同一列上的两个外键
- 19. 两个外键引用一个表
- 20. 在Access表中连接两列
- 21. 使用两个其他表中的值更新表中的列
- 22. 通过在其他表中添加列来添加特定列
- 23. 来自一个表的两个外键
- 24. 在没有连接两个表的情况下选择一列(具有外键)
- 25. MySQL:在一个表中引用另一个表的两个外键
- 26. 在列表中查看两列主键
- 27. 将表中两列的连接值插入另一个表的一列中
- 28. 在存储过程中插入其他表的列中的值的外键列
- 29. 引用相同列的两个外键
- 30. Mysql的连接两个表和,其中和基团通过
也许去除蟒蛇标签,因为这关系不大吧 – 2012-04-07 18:40:45