3
A
回答
5
如果你的数据库允许在索引中,你可以做这样的事情(ANSI SQL)表达式:
CREATE UNIQUE INDEX on your_table (least(column1, column2)
, greatest(column1, column2));
注意这是一个独特的索引不是一个独特的公司nstraint。大多数数据库管理系统唯一的区别是你不能拥有唯一的索引作为外键的目标,但是否则它们的目的是相同的。
如果你的DBMS没有least()
或greatest()
你可以替换使用CASE表达式:
create unique index on your_table
(case column1 < column2 then column1 else column2 end,
case column2 > column1 then column2 else column1 end));
0
对2列的唯一约束只能防止被插入(切换它们是允许的)那些确切的2个值:
因此,你需要这样的(ORACLE),TRIGGER:
CREATE TRIGGER trig1
BEFORE INSERT ON TAB
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
FOUND NUMBER;
BEGIN
SELECT COUNT(1) into FOUND FROM TAB WHERE
(COLUMN1=:NEW.column2 AND COLUMN2=:NEW.column1)
OR (COLUMN1=:NEW.column1 AND COLUMN2=:NEW.column2);
IF FOUND>0 THEN
raise_application_error (-20001,'INSERT not allowed');
END IF;
END trig1;
警告:语法未选中。
0
望着文档,发现这个对于ORACLE SGBD:
CREATE TABLE b(
b1 INT,
b2 INT,
CONSTRAINT bu1 UNIQUE (b1, b2)
USING INDEX (create unique index bi on b(b1, b2)),
CONSTRAINT bu2 UNIQUE (b2, b1) USING INDEX bi);
章ORACLE documentation页的“指定索引关联使用约束”。
跳过这个帮助。
相关问题
- 1. 复合唯一约束SQL
- 2. Oracle 12行组合的唯一约束
- 3. 如何根据2列创建SQL唯一约束?
- 4. 对两列组合的唯一约束非聚簇索引
- 5. SQL约束:非唯一列中的唯一值
- 6. 多列唯一约束
- 7. 多列唯一约束
- 8. DB2 - 唯一约束多列
- 9. 唯一约束外键列
- 10. 添加唯一约束列
- 11. 唯一约束
- 12. 如何在mysql的2列之间有2路唯一约束
- 13. SQL跨多个表的唯一约束
- 14. SQL Server中的可逆唯一约束
- 15. SQL管理工作室对7列的t-sql唯一约束
- 16. SQL或LINQ到SQL基于两列的唯一约束值
- 17. 唯一约束(SchemaName.DATA1_PK)
- 18. 唯一约束值
- 19. 唯一约束JayData
- 20. 唯一约束Nhibernate
- 21. 合并复制唯一密钥约束
- 22. 唯一约束复合主键在JPA
- 23. 合并导致违反唯一约束
- 24. 唯一约束(与另一列的某个值相结合)
- 25. 使用约束条件的复合唯一SQL Server 2008
- 26. 表列上的唯一约束条件
- 27. 可空列的唯一约束
- 28. 删除H2中列的唯一约束
- 29. 超过10列的唯一约束
- 30. 指数多列的唯一约束
我想你可能想尝试插入触发器来处理这一个。 – 2012-04-15 04:13:54
所以你想不允许column1小于column2?你能否更具体地说明你想要制造的约束? – aaaidan 2012-04-15 04:26:22