ホームページ >データベース >mysql チュートリアル >MySQL で外部キー関係に基づいて一意のシーケンス列を生成するにはどうすればよいですか?
データベースの機能強化: MySQL での外部キー関係に基づいたシーケンス列の生成
MySQL のようなリレーショナル データベースでは、次の追加が必要になる場合があります。シーケンス番号を取得するテーブルへの列。シーケンスが別の列の特定の関連値に対して一意である必要がある場合、これは困難になる可能性があります。この問題の解決策を探ってみましょう。
問題ステートメント
次の構造を持つデータベース テーブルの例を考えてみましょう。
CREATE TABLE mytable ( ID INT NOT NULL, ACCOUNT INT NOT NULL, some_other_stuff TEXT );
目標は、個別のアカウントごとに一意のシーケンス番号を割り当てる seq 列を追加することです。 value.
SQL ソリューション
この問題に対する 1 つの優れた解決策は、MySQL のトリガーを利用することです。トリガーは、テーブルで特定のイベントが発生したときに、事前定義された一連のアクションを自動的に実行するデータベース オブジェクトです。
トリガーの作成
トリガーを作成するにはシーケンス列を生成するには、次の SQL ステートメントを実行します。
CREATE TRIGGER trg_mytable_bi BEFORE INSERT ON mytable FOR EACH ROW BEGIN DECLARE nseq INT; SELECT COALESCE(MAX(seq), 0) + 1 INTO nseq FROM mytable WHERE account = NEW.account; SET NEW.seq = nseq; END;
トリガーの仕組みWorks
このトリガーは、各行が mytable に挿入される前に実行されます。次の方法で行の新しいシーケンス番号を計算します。
例
初期テーブル データを考えてみましょう:
ID | ACCOUNT | some_other_stuff |
---|---|---|
1 | 1 | ... |
2 | 1 | ... |
3 | 1 | ... |
4 | 2 | ... |
5 | 2 | ... |
6 | 1 | ... |
ACCOUNT = 1 でテーブルに新しい行を挿入します。のシーケンス値が生成されます4.
ID | ACCOUNT | seq | some_other_stuff | |
---|---|---|---|---|
1 | 1 | 1 | ... | |
2 | 1 | 2 | ... | |
3 | 1 | 3 | ... | |
4 | 2 | 1 | ... | |
5 | 2 | 2 | ... | |
**6 | 1 | 4 | ... | ** |
結論
SQL トリガーの機能を活用することで、別のフィールドに基づいてシーケンス列を追加するという目的の機能を実現できます。この手法は効率的で柔軟で、実装が簡単です。
以上がMySQL で外部キー関係に基づいて一意のシーケンス列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。