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. 組合兩列的唯一約束
- 3. 兩列組合的唯一約束?
- 4. Mongoid組合鍵上的唯一約束
- 5. Oracle 12行組合的唯一約束
- 6. 爲2列創建唯一約束
- 7. 學說組合鍵vs唯一約束
- 8. SQL隨機組合2個唯一列
- 9. 唯一約束在NON-NULL列上的唯一約束
- 10. sql錯誤 - 唯一約束
- 11. 如何根據2列創建SQL唯一約束?
- 12. 對兩列組合的唯一約束非聚簇索引
- 13. SQL約束:非唯一列中的唯一值
- 14. 多列唯一約束
- 15. 添加唯一約束列
- 16. 多列唯一約束
- 17. 兩列唯一約束ActiveAndroid
- 18. DB2 - 唯一約束多列
- 19. 唯一約束外鍵列
- 20. 唯一約束
- 21. 如何在mysql的2列之間有2路唯一約束
- 22. SQL Server中的可逆唯一約束
- 23. SQL跨多個表的唯一約束
- 24. SQL複雜的唯一約束
- 25. SQL:如何應用唯一約束兩列,其中兩個項目(無序)的組合是唯一的
- 26. SQL管理工作室對7列的t-sql唯一約束
- 27. SQL或LINQ到SQL基於兩列的唯一約束值
- 28. 唯一約束Nhibernate
- 29. OpenERP唯一約束
- 30. oracle唯一約束
我想你可能想嘗試插入觸發器來處理這一個。 – 2012-04-15 04:13:54
所以你想不允許column1小於column2?你能否更具體地說明你想要製造的約束? – aaaidan 2012-04-15 04:26:22