0

MySQL などの一部の DBMS は、さまざまな範囲要件に対してさまざまな整数型をサポートしています。

たとえば、値が小さい場合はTINYINTが好まれ、値が大きい場合は INT が望ましい場合があります。

アプリケーションのユーザーなど、些細なデータを格納するテーブルがいくつかあります。ユーザー数を 6,000 の範囲にすることを計画していたので、 を選択しましたが、署名されていない場合に 32,767 または 65,535SMALLINTの最大範囲を超えて転倒する可能性は低いですが、可能性のあるイベントに対応したいと考えています。SMALLINT.

これをチェックするためのロジックを実装する必要がありtriggerますか?

4

1 に答える 1

1

これは悪い考えです。を使用するだけintです。

同じテーブルのトリガーからテーブルを変更しようとするとどうなるかという好奇心から、SQL Server がそれをどのように処理するかを確認するためにそれを行いました。

SQL Serverは(当然のことながら)不平を言います:

メッセージ 1713、レベル 16、状態 7、プロシージャ tgALTERTABLE、行 10 テーブル 'Test' がターゲット テーブルであるか、現在実行中のトリガーのカスケード アクションの一部であるため、ALTER COLUMN をテーブル 'Test' で/使用して実行できません。

トリガーは通常、実行中のデータ変更トランザクションの同期部分として存在するため、他のすべての DBMS プラットフォームが同じことについて文句を言うとは限りませんが、ほとんどの場合はそうなると思います。基礎となるテーブルを変更することは決して機能しないはずです。操作にはスキーマ変更ロックが必要になるためです。このロックは、既に開始されているトランザクションの後まで付与できません。

SQL Server のロック タイプのリファレンスは次のとおりです。

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

于 2012-11-10T15:54:41.447 に答える