2012-02-13 121 views
4

我使用MySQL,這裏是一個簡單的查詢集:MySQL的:CHECK約束與日期

create table dcheck (
    fdate date, 
    sdate date, 
    check (fdate <= sdate) 
); 

insert into dcheck values ('2006-12-12','2003-12-12'); 
insert into dcheck values ('2003-12-12', '2006-12-12'); 

在這裏,我希望第一個插入語句失敗。但令人驚訝的是,查詢都通過了,表中有兩行。

任何人都可以請解釋爲什麼嗎?

謝謝

回答

10

MySQL沒有實現CHECK約束。從latest (5.6) fine manual

CHECK子句被解析但被所有存儲引擎忽略。

因此,爲了兼容其他SQL,語法被解析,但檢查沒有實現。

您可以使用BEFORE INSERT和BEFORE UPDATE觸發器假冒您的CHECK約束,如果未滿足所需條件,則觸發threw an exception

+1

+1的觸發器 – 2012-02-13 01:09:05