sqlite唯一索引多列任意组合

时间:2016-07-26 14:35:58

标签: sql database sqlite indexing constraints

我有一张位置和距离表。 A和B之间的距离与B和A之间的距离相同。是否可以在表格中添加唯一约束,以便在尝试插入组合时使用列B和A'如果' A和B'已插入

gitk

2 个答案:

答案 0 :(得分:1)

CHECK约束不能包含子查询,因此您必须使用trigger执行此操作:

CREATE TRIGGER locTbl_loc12_unique
BEFORE INSERT ON locTbl
FOR EACH ROW
BEGIN
    SELECT RAISE(FAIL, "loc2/loc1 already exists")
    FROM locTbl
    WHERE loc1 = NEW.loc2
      AND loc2 = NEW.loc1;
END;

答案 1 :(得分:1)

只需要loc1< = loc2(或> =)

create table locTbl (
   loc1 text,
   loc2 text,
   dist integer,
   constraint c check(loc1<=loc2)
);