2016-05-14 144 views
0

这是我的专栏 enter image description here小整数类型长度

,因为它的长度规定(SMALLINT(4)),但它并不限制值 的范围内,所以我怎么能限制,只有4位值可以在此列

+0

你可以做的是在应用程序代码,或者您的查询 – Strawberry

+0

这应该做的伎俩。结果与预期结果有何不同? – Mureinik

+0

@Mureinik括号中的数字与数据类型将接受的值范围没有关系。 – Strawberry

回答

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 | 
+------+ 
0

输入从MySQL manual

MySQL支持用于选择指定的整数数据类型的显示宽度括号中的类型base关键字以下的延伸部。例如,INT(4)指定一个显示宽度为四位的INT。

显示宽度确实是不是约束可存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值被正确显示。例如,指定为SMALLINT(3)的列的常用SMALLINT范围为-32768至32767,并且三位数所允许的范围之外的值全部使用三位以上的数字显示。

因此,您不能仅限制mysql中的4位数值。而MySQL不支持自定义的CHECK约束。但是你可以创建像this这样的触发器并检查里面的值。请注意,自MySQL 5.5以来,SIGNAL起作用。

+0

我认为OP已经知道这一点。 – Strawberry