bha*_*don 3 sql database oracle oracle11g
我正在尝试为两列的组合实现唯一约束.我正在运行oracle 11g.
具体来说,我有两列A和B.
我有一排如下
A B
1 2
Run Code Online (Sandbox Code Playgroud)
然后我希望插入时以下组合失败
A B
1 2
2 1
Run Code Online (Sandbox Code Playgroud)
这可能是通过Oracle中的唯一索引实现的吗?
是的,它是可能的(例如使用生成的列):
CREATE TABLE tab(A INT NOT NULL, B INT NOT NULL);
ALTER TABLE tab ADD c1 AS (LEAST(A,B));
ALTER TABLE tab ADD c2 AS (GREATEST(A,B));
CREATE UNIQUE INDEX UQ_tab ON tab(c1,c2);
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以隐藏这些列(Oracle 12c):
ALTER TABLE tab MODIFY c1 INVISIBLE;
ALTER TABLE tab MODIFY c2 INVISIBLE;
Run Code Online (Sandbox Code Playgroud)
更简单的方法:
CREATE UNIQUE INDEX UQ_tab ON tab(least(A,B), greatest(A,B));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |