2012-11-24 49 views
1

我正在創建我的第一個mysql腳本,並希望創建一個'type'列的表。它應該只有兩個可能的值:「XYZ」和「ABC」,所以我做了:SQL,約束CHECK

CREATE TABLE table(
type varchar(12) NOT NULL, 
CHECK (type = 'XYZ' or type = 'ABC'); 

但是當我測試和像234或「約翰」插入值它的工作,並且不返回任何錯誤。我認爲它不應該插入價值'約翰',是嗎?

回答

2

的MySQL does not support檢查約束:

The CHECK clause is parsed but ignored by all storage engines. 

因此,儘管check聲明不給一個錯誤,它忽略。

+0

哈。在MySQL中似乎有很多類似的東西。語法它可以讓你編寫它實際上沒有做任何事情。我寧願它默認情況下很吵,並說當事情不會做任何事時。 – theon

+0

@theon:你可以隨時升級到PostgreSQL;) –

+0

@a_horse_with_no_name:D我們在兩個工作地點都使用,所以我可以同樣地抱怨它們。 – theon

1

使用enum代替:

CREATE TABLE test( 
    type ENUM('XYZ', 'ABC') 
); 

this SQL fiddle。嘗試改變插入到 '約翰',你會得到一個錯誤:

+0

+1不錯,比檢查限制靈活一點,但適合OP的問題 – Andomar

+0

我之前使用過ENUM,但我只是感興趣的是我是否也可以使用CHECK,以及如何做到這一點。但也謝謝 –