ホームページ > データベース > mysql チュートリアル > トリガーを使用して同じテーブル内の行を更新する方法: 重複する期間の解決策?

トリガーを使用して同じテーブル内の行を更新する方法: 重複する期間の解決策?

Patricia Arquette
リリース: 2024-10-28 17:15:29
オリジナル
588 人が閲覧しました

How to Update Rows in the Same Table Using Triggers: A Solution to Overlapping Time Periods?

トリガーを使用した同じテーブル内の別の行の更新

問題:

レコードの維持期間が重複している場合、多くの場合、既存の範囲と重なる startDate を持つ新しいレコードが挿入されるときに、以前のレコードの終了日を更新する必要があります。

元の試行:

提供されたトリガーは、procKey が NEW 行と一致し、endDate が 20501231 である値 ADDDATE(NEW.startDate, -1) を使用して既存の行の endDate を更新しようとします。ただし、このアプローチでは、「更新できません」というエラーが発生します。ストアド関数/トリガーのテーブル 'split' は、このストアド関数/トリガーを呼び出したステートメントによってすでに使用されているためです。

解決策:

残念ながら、トリガーは使用できませんトリガーをトリガーした行と同じテーブル内の他の行を直接更新します。代わりに、別のアプローチが必要です。

ストアド プロシージャの使用:

次のロジックをカプセル化するストアド プロシージャを作成します:

  1. 分割テーブルに新しい行を挿入または更新します。
  2. 新しい行に一致する procKey と将来の日付 (例: 20501231) に一致する endDate を使用して、前の行の endDate を ADDDATE(NEW. startDate, -1).
  3. 変更が永続化されるようにトランザクションをコミットします。

このアプローチにより、単一のトランザクション内で同じテーブル内の複数の行を更新できるようになり、トリガーによって発生する可能性のある競合。

以上がトリガーを使用して同じテーブル内の行を更新する方法: 重複する期間の解決策?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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