2012-11-10 49 views
0

某些DBMS(如MySQL)支持不同範圍要求的不同整數類型。DBMS:通過觸發器增加int數據類型範圍

例如,對於較小的值,TINYINT是優選的,而對於較大的值,INT可能是可取的。

我有幾個表存儲瑣碎的數據,如應用程序的用戶。雖然我已計劃的用戶數量在6,000的範圍內,因此選擇SMALLINT,但我想迎合一個不太可能但可能發生的事件,即它在該案例中最大範圍內的SMALLINT,32,767或65,535未簽名。

我應該通過trigger實現檢查這個邏輯嗎?

回答

1

這是一個壞主意。只需使用int即可。

出於純粹的好奇心,如果您嘗試從同一張表上的觸發器更改表,我會這樣做,看看SQL Server如何處理它。

SQL服務器(理所當然)抱怨:

消息1713級別16,狀態7,過程tgALTERTABLE,10號線 不能上執行ALTER COLUMN /使用表 '測試',因爲該表是目標表或當前正在執行的觸發器的部分級聯動作。

因爲觸發器通常作爲正在執行的數據修改事務的同步部分存在,所以我期望大多數(如果不是所有其他DBMS平臺)抱怨相同。更改基礎表不應該工作,因爲操作需要一個模式修改鎖定,該鎖定只有在已經啓動的事務處理之後才能被授予。

下面是SQL Server的鎖類型的引用:

http://msdn.microsoft.com/en-us/library/ms175519(v=sql.105).aspx