某些DBMS(如MySQL)支持不同範圍要求的不同整數類型。DBMS:通過觸發器增加int數據類型範圍
例如,對於較小的值,TINYINT
是優選的,而對於較大的值,INT可能是可取的。
我有幾個表存儲瑣碎的數據,如應用程序的用戶。雖然我已計劃的用戶數量在6,000的範圍內,因此選擇SMALLINT
,但我想迎合一個不太可能但可能發生的事件,即它在該案例中最大範圍內的SMALLINT
,32,767或65,535未簽名。
我應該通過trigger
實現檢查這個邏輯嗎?
某些DBMS(如MySQL)支持不同範圍要求的不同整數類型。DBMS:通過觸發器增加int數據類型範圍
例如,對於較小的值,TINYINT
是優選的,而對於較大的值,INT可能是可取的。
我有幾個表存儲瑣碎的數據,如應用程序的用戶。雖然我已計劃的用戶數量在6,000的範圍內,因此選擇SMALLINT
,但我想迎合一個不太可能但可能發生的事件,即它在該案例中最大範圍內的SMALLINT
,32,767或65,535未簽名。
我應該通過trigger
實現檢查這個邏輯嗎?
這是一個壞主意。只需使用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