トリガーを使用して MySQL でフィールドをデフォルトの自動生成 ID に設定する方法

Mary-Kate Olsen
リリース: 2024-11-06 22:14:03
オリジナル
974 人が閲覧しました

How to Default a Field to the Auto-Generated ID in MySQL Using Triggers?

フィールドを自動生成 ID の値にデフォルト設定する MySQL トリガー

MySQL では、特定の処理を実行するトリガーを作成できます。変更が発生する前または後のテーブル データに対する操作。一般的な使用例の 1 つは、挿入時に null のままになる場合に、フィールドを自動生成された主キー (ID) の値にデフォルト設定することです。

問題ステートメント:

これを実現するために、id (主キー)、group_id (整数)、および値 (varchar) の 3 つの列を持つテーブルを考えてみましょう。目的は、レコード挿入時に次の動作を行うことです。

  • group_id が指定されている場合は、変更しないでください。
  • group_id が省略されている場合は、新しい値に設定します。 generated id.

トリガー実装:

この操作は単一のステートメントまたはトリガー内で実行することが望ましいですが、MySQL の制限によりそれができません。回避策の 1 つは、2 段階のアプローチを利用することです。

  1. group_id が指定されていない場合、group_id を id に設定する BEFORE INSERT トリガーを作成します。
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
ログイン後にコピー
  1. MySQL では INSERT 後のカラム値の変更が許可されていないため、group_id が省略された場合を処理するには、挿入直後に UPDATE ステートメントを実行する必要があります:
INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();
ログイン後にコピー

制限事項:

BEFORE INSERT トリガーは、新しく生成された ID 値がまだ割り当てられていないため、アクセスできないことに注意することが重要です。ただし、生成された値にアクセスするために AFTER INSERT トリガーを使用することは、そのフェーズでは列の値を変更できないため、オプションではありません。

したがって、上記の 2 段階のアプローチが、MySQL の望ましい動作に対する解決策を提供します。 .

以上がトリガーを使用して MySQL でフィールドをデフォルトの自動生成 ID に設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート