DBMS:通过触发器增加int数据类型范围

时间:2012-11-10 09:43:10

标签: triggers database

某些DBMS(如MySQL)支持不同的整数类型以满足不同的范围要求。

例如,对于较小的值,首选TINYINT,而对于较大的值,可能需要INT。

我有一些表存储琐碎的数据,例如应用程序的用户。虽然我已经计划将用户数量设置为6,000,因此选择SMALLINT,我希望能够满足它在{{1}的最大范围内倒塌的不太可能但可能发生的事件。在无符号的情况下,为32,767或65,535。

我应该通过SMALLINT实现检查这个的逻辑吗?

1 个答案:

答案 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