2012-02-20 89 views
1

如何限制我的数据库列的集中输入到数字的具体数量?数据库列INT限制

CREATE TABLE tab (id INT <1 digit> not null, value INT <10 digits> not null); 

谢谢

+0

'mysql'或'sql'触发? – diEcho 2012-02-20 13:00:35

+0

哦对不起mysql – user1155788 2012-02-20 13:05:04

回答

5

添加一个检查约束(SQL服务器)或触发(MySQL的,不支持CHECK约束)

的SQL Server实例:

CREATE TABLE tab (
    id tinynot null CHECK (id BETWEEN 0 AND 9), 
    value INT not null CHECK (id BETWEEN 1000000000 AND 9999999999) 
); 
  • 如果你只想要一个数字,虽然,然后使用TINYINT
  • 如果没有存储的数字(例如“123456789个香蕉”),但是,比如说,电话号码,然后使用VARCHAR类型。见https://stackoverflow.com/a/8284674/27535

编辑,你需要在MySQL

+0

检查语法不适合,因为它是为MySQL(我知道这是这个答案后澄清,但只张贴了为清楚起见) – 2012-02-20 13:06:41

+0

+1检查。 ?香蕉:) – StuartLC 2012-02-20 13:06:56

+0

@ Simonatmso.net:我的答案已澄清 – gbn 2012-02-20 13:08:23

0

短版本使用TINYINT UNSIGNED NOT NULL将是一个更适合的数据类型,但它不能限制存储的值。

的更长的版本是,你不妨在MySQL integer data types读了。您会发现TINYINT已足够满足您的需求,因为这是一个存储-128至+127或0至+255值的1字节列。

其次,如果你把它定义为TINYINT(1),那么你将其定义为是与1位的显示宽度的TINYINT。这不会阻止存储大于10的值。有关此行为的更多阅读,请检查numeric type attributes

+0

谢谢,你知道我在做什么吗?我明天可能会自己做一个真正的项目,不要任何人只是“放弃”我......谢谢。 :-D – user1155788 2012-02-20 13:17:56

+0

顺便说一句,我想我会用VARCHAR(1)。这更好,因为我不需要再读任何东西。 - :d – user1155788 2012-02-20 13:19:49

+0

VARCHAR(1)使用2个字节的数据,当CHAR(1)使用由于VARCHAR需要1个字节1个字节(在短的长度)的了解串多久是(VARCHAR = 1个在每个单独的每个字符字节字符串+ 1字节的长度@字符串最多可包含255个字符,而每个字符的字符不超过1个字符,因此如果您知道每个单元格将具有1字节的字符串,即单个字符,则使用CHAR( 1) – 2012-02-20 13:20:38