2016-05-09 64 views
0

我想要確保有我的表中沒有重複的時間戳,但後來我發現,這可能是有問題的,如果我只是使用UNIQUE,因爲現在我的表有:如何針對其他字段實施唯一字段?

_ID field (autoincrement) 
Account ID (integer, links to an account table) 
Category ID (integer, links to a category table) 
Value (the value of this category for this account) 
Timestamp (the timestamp of this value of this category for this account) 

有沒有一種方法來指定時間戳字段在帳戶ID和類別ID的上下文中是唯一的?如其中,對於帳戶和類別,不應該可以爲單個時間戳輸入兩個值。但時間戳可能會在整個表中出現多次,或者是因爲它對應於其他類別和/或帳戶。

+0

你真的需要嗎?也許你以後可以用不同的方式處理。 –

+0

我需要它,因爲我不想讓人們插入重複的東西 –

+1

你可以使用多列'UNIQUE(account,category,timestamp)', – dnoeth

回答

0

你可以創建一個觸發器,並檢查您所需要的任何約束:

@Override 
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { 
    database.execSQL("CREATE TRIGGER UNIQUE_TIMESTAMP_TRIGGER " + 
      "AFTER INSERT ON MY_TABLE FOR EACH ROW " + 
      "BEGIN " + 
      " SELECT RAISE(ABORT, 'Timestamp not unique') WHERE " + 
      " EXISTS(SELECT TIMESTAMP MY_TABLE T2 " + 
      " WHERE T2.TIMESTAMP = NEW.TIMESTAMP AND T2.ACCOUNT_ID = NEW.ACCOUNT_ID) " + 
      "END; "); 
} 
相關問題