2012-11-24 103 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,以及如何做到这一点。但也谢谢 –