【问题标题】:How can i do constrain in two direction? oracle [closed]我怎样才能在两个方向上进行约束?甲骨文[关闭]
【发布时间】:2014-03-15 14:30:11
【问题描述】:

我需要做约束,不要让插入这两行:

INSERT INTO table1
VALUES('LON','BUD',2000, SYSDATE);
INSERT INTO table1
VALUES('BUD','LON',2000, SYSDATE);

任何一个

INSERT INTO table1
VALUES('LON','BUD',2000, SYSDATE);

所以在我看来 LON , BUD 等于 BUD, LON

如果我需要从另一个表中插入例如:LON - BUD、BUD-LON、BUD-MAD... 我如何在插入之前检查它?

【问题讨论】:

  • 我不认为你可以通过约束来做到这一点 - IMO 你最好用触发器来做到这一点。

标签: sql oracle unique-constraint


【解决方案1】:

您可以使用基于函数的索引来做到这一点:

create unique index table1_col1_col2 on table1(least(col1, col2), greatest(col1, col2));

或者,您可以添加一个约束 col1 < col2 并在 col1, col2 上创建一个唯一索引。您可以通过添加插入/更新触发器来增强这一点,以便在以“错误”顺序给出时交换值。

【讨论】:

  • +1。在这种情况下,检查约束是一个很好的解决方案(触发器永远不是正确的答案)。
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 2015-08-03
  • 2016-01-16
  • 2012-12-23
  • 2014-03-17
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多