Mysql SQL,约束检查

Mysql SQL,约束检查,mysql,sql,Mysql,Sql,我正在创建我的第一个mysql脚本,并希望创建一个列为“type”的表。它应该只有两个可能的值:“XYZ”和“ABC”,所以我做了: CREATE TABLE table( type varchar(12) NOT NULL, CHECK (type = 'XYZ' or type = 'ABC'); 但当我测试和插入234或“John”之类的值时,它工作正常,不会返回任何错误。我认为它不应该插入值“John”,是吗?MySQL检查约束: The CHECK clause is parsed

我正在创建我的第一个mysql脚本,并希望创建一个列为“type”的表。它应该只有两个可能的值:“XYZ”和“ABC”,所以我做了:

CREATE TABLE table(
type varchar(12) NOT NULL,
CHECK (type = 'XYZ' or type = 'ABC');
但当我测试和插入234或“John”之类的值时,它工作正常,不会返回任何错误。我认为它不应该插入值“John”,是吗?

MySQL检查约束:

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

因此,虽然
check
语句没有给出错误,但它会被自动忽略。

使用
enum

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

看。尝试将insert更改为“John”,您将得到一个错误:

似乎MYSQL没有检查


你可以试试触发器。

+1不错,比check约束灵活一点,但符合OP的问题。我之前使用过ENUM,但我只是想知道我是否也可以使用check以及如何使用它。但也感谢沙阿。MySQL中似乎有很多类似的东西。语法它允许您编写实际上不做任何事情的代码。我更希望它在默认情况下是嘈杂的,并且在事情没有进展的时候说出来。@theon:您可以随时升级到PostgreSQL;)@一匹没有名字的马:我们在我工作的地方都用,所以我会平等地抱怨它们。