某些DBMS(如MySQL)支持不同的整数类型以满足不同的范围要求。
例如,对于较小的值,首选TINYINT
,而对于较大的值,可能需要INT。
我有一些表存储琐碎的数据,例如应用程序的用户。虽然我已经计划将用户数量设置为6,000,因此选择SMALLINT
,我希望能够满足它在{{1}的最大范围内倒塌的不太可能但可能发生的事件。在无符号的情况下,为32,767或65,535。
我应该通过SMALLINT
实现检查这个的逻辑吗?
答案 0 :(得分:1)
这是一个坏主意。只需使用int
。
出于好奇心,如果你试图从同一个表上的触发器改变一个表会发生什么,我只是想看看SQL Server将如何处理它。
SQL Server(理所当然地)抱怨:
消息1713,级别16,状态7,程序tgALTERTABLE,第10行 无法使用表'Test'执行ALTER COLUMN,因为该表是目标表或当前正在执行的触发器的级联操作的一部分。
我希望大多数(如果不是所有)其他DBMS平台都抱怨相同,因为触发器通常作为正在执行的数据修改事务的同步部分存在。更改基础表应该永远不会起作用,因为操作需要一个模式修改锁,直到已经启动的事务之后才能授予该锁。
以下是SQL Server锁类型的参考:
http://msdn.microsoft.com/en-us/library/ms175519(v=sql.105).aspx