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