0

MySQL Workbench 5.2 CE を使用していますが、トリガーの作成に問題があります。「id」フィールドが自動インクリメントになるようにテーブルを設定しました

TABLE
addr  VARCHAR
id    INT

および Java で記述されたバッチ ステートメント

String state1 = "insert ignore into TABLE(addr) values (?);"

そして、そのように設定されたトリガー

USE DB_NAME;
DELIMITER $$

CREATE TRIGGER `check_addr` BEFORE INSERT ON tableFOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
IF ( SELECT * FROM table WHERE addr = NEW.addr ) = 0
THEN insert into table(addr) values (NEW.addr);
END IF;

これらはすべて、自動インクリメント値のギャップを回避しようとしています。多くのネットワーク関連情報を格納するためにテーブルを使用しているため、自動インクリメント フィールドの潜在的なギャップはかなり大きくなります。

トリガーの目的は、insert ステートメント (およびその後の自動インクリメント フィールドのインクリメント) を回避し、黙って中止することです。このようにして、自動インクリメント値は連続したままになります。

簡単なメモ:addrフィールドは PK です。

ありがとう。

2013 年 12 月 4 日編集 更新として、AI フィールドを削除し、代わりに複合キーを選択しました。少し多くのディスク容量を使用しますが、他のフィールドを正規化することに賢くなったので、最終的にはうまくいきました. 助けてくれてありがとう!

4

1 に答える 1

1

いやいやいやいや!

自動インクリメント primay キーをそのような方法で誤用しないでください。これは、自動生成され、変更されることはありません。放っておきなさい。

行が挿入された順序を示すインジケーターが必要な場合は、別の列を使用します。たとえば、 のdatetimeようなデフォルト値を持つ列current_timestamp。そうすれば、それも自動的に入力され、何もする必要はありません。

于 2013-10-01T06:14:14.643 に答える