我试图将列限制为特定值,但没有成功。
这是我一直在尝试的:
mysql> CREATE TABLE my_table (
-> name VARCHAR(20),
-> sex CHAR(1) CHECK (sex IN('F','M'))
-> );
Query OK, 0 rows affected (0.18 sec)
mysql> INSERT INTO my_table VALUES
-> ('John','D');
Query OK, 1 row affected (0.07 sec)
mysql> SELECT * FROM my_table;
+------+------+
| name | sex |
+------+------+
| John | D |
+------+------+
1 row in set (0.00 sec)
mysql>
如您所见,约束并未强制执行...
最佳答案
这是因为CHECK clause is parsed but ignored by all storage engines.
您可以创建一个触发器,以便在插入开始之前检查“性别”列的值。
尝试这样:
DELIMITER $$
CREATE TRIGGER `mytrigger` BEFORE INSERT ON `Table`
FOR EACH ROW
BEGIN
IF SEX <> 'M' or SEX <> 'F' THEN
SIGNAL SQLSTATE '123'
SET MESSAGE_TEXT := 'check constraint on Table.Sex failed';
END IF;
END$$
DELIMITER ;
关于mysql - 对值的 SQL 约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22559837/