【问题标题】:sqlite unique index multiple columns any combinationsqlite 唯一索引多列任意组合
【发布时间】:2016-11-30 06:37:36
【问题描述】:

我有一张位置和距离表。 A 和 B 之间的距离与 B 和 A 之间的距离相同。是否可以向表中添加唯一约束,以便尝试插入组合“B 和 A”时的列在“A 和 B”时失败已经插入了

INSERT INTO locTbl VALUES ('A', B', 100.0);  //Good to insert

loc1 | loc2 | dist
-----+------+-----
A     B      100.0

INSERT INTO locTable VALUES('B','A',100.0); //Produce an error

【问题讨论】:

    标签: sql database sqlite indexing constraints


    【解决方案1】:

    只需要 loc1=)

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

    【讨论】:

      【解决方案2】:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        相关资源
        最近更新 更多