mysql - 对值的 SQL 约束不起作用

标签 mysql constraints

我试图将列限制为特定值,但没有成功。
这是我一直在尝试的:

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/

相关文章:

Mysql SET NAMES UTF8 - 如何去掉?

MySQL - 修复多条记录

mysql - 来自 information_schema 的约束细节(关于更新级联,关于删除限制)

ios - 父 View iOS 的 subview 约束

PHP cookie 不是在 ajax 处理脚本中创建的

php - 使用 Laravel eloquent 搜索数据库列中的值是否出现在搜索字符串中

Mysql str_to_date 不执行任何操作

python - 控制洗牌距离

MySQL:奇怪的外键约束

python - 在 python 中具有约束和回溯的数独求解器