我在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