答案 0 :(得分:1)
“在查询中”验证可以这样完成:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table (year INT NOT NULL);
INSERT INTO my_table SELECT 2016 FROM (SELECT 1) n WHERE 2016 BETWEEN 0 AND 9999;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM my_table;
+------+
| year |
+------+
| 2016 |
+------+
INSERT INTO my_table SELECT 20161 FROM (SELECT 1) n WHERE 20161 BETWEEN 0 AND 9999;
Query OK, 0 rows affected (0.00 sec)
SELECT * FROM my_table;
+------+
| year |
+------+
| 2016 |
+------+
答案 1 :(得分:0)
来自MySQL manual:
MySQL支持扩展,可以选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位的INT。
显示宽度 不 约束可以存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三位数允许的范围之外的值将使用三位数以上的方式完整显示。
因此,您不能以这种方式仅限制mysql中的4位数值。 MySQL不支持自定义CHECK
约束。但您可以创建this之类的触发器并检查内部值。请注意,SIGNAL
自MySQL 5.5起就可以正常工作。