1

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

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

但是当我测试和插入像 234 或 'John' 这样的值时,它正在工作并且不会返回任何错误。我认为它不应该插入值“约翰”,是吗?

4

3 回答 3

2

MySQL不支持检查约束:

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

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

于 2012-11-24T16:55:25.473 回答
1

改为使用enum

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

请参阅此 SQL 小提琴。尝试将插入更改为“John”,您将收到错误消息:

于 2012-11-24T16:56:22.373 回答
0

似乎MYSQL没有检查......

http://bugs.mysql.com/bug.php?id=25660

http://blog.christosoft.de/2012/08/mysql-check-constraint/

http://forums.mysql.com/read.php?136,572271,572603#msg-572603

你可以试试触发器。

于 2012-11-24T17:06:17.083 回答