小型Int型长度

时间:2016-05-14 12:17:38

标签: mysql

这是我的专栏 enter image description here

指定它的长度(smallint(4)),但它不限制值的范围 ,那么如何限制在此列中只能输入4位数值

2 个答案:

答案 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起就可以正常工作。