2013-12-19 33 views
1

我有兩列的表:MySQL的:創建數據約束

assign_date | complete_date 
---------------------------- 
2004-04-23 | 2005-05-13 
...  | ... 

日期是在格式YYYY-MM-YY。

當我插入一個新行時,我總是希望complete_date位於assign_date或之後。所以如果一行有2013-10-10的assign_date,2013-10-09將是無效的。有沒有辦法做到這一點在MySQL中,而不使用觸發器?

+0

不幸的是,我認爲這將需要一個觸發器 – Jondlm

+0

爲什麼「*不使用觸發器*」? – eggyal

+0

您需要一個觸發器:雖然MySQL支持'CHECK'子句,但目前沒有存儲引擎支持它。 –

回答

1

不,您必須使用觸發器在數據庫中執行此規則。

有些人在插入行之前在其應用程序中進行驗證。但這很容易出錯,因爲開發人員可能會忘記在插入或更新數據的每一種情況下執行檢查。或者有人可以直接更新數據而無需使用應用程序。

+0

目前尚不清楚爲什麼OP排除了觸發器。也許這個問題純粹是假設的,在這種情況下,至少值得注意的是可以編譯一個包含每個可能有效組合的表,然後強制執行複合外鍵約束。但除此之外,我當然同意觸發器是MySQL中描述問題的正確(也是唯一的)解決方案。 – eggyal

+0

感謝大家的回答/評論。是的,我參與了假設;我想看看除觸發器之外是否還有其他實用解決方案。 –