テーブルには、id, filename, width, height, removed_at
の画像が格納されています。 テーブルは時々幅と高さの更新を取得し、行は決して削除されません。削除は、removed_at
セルをNULLからタイムスタンプに更新することによって処理されます。 私は別のテーブルch_services
をセル上に外部キーと共に持っていますimage
セルid
ch_img
テーブルにあります。 今度は、removed_at
セルをch_img
に更新すると、image
セルがch_services
に設定されてNULLに設定されます。 基本的に種類はON DELETE SET NULL
ですが、DELETEはありません。更新があります。しかしwidth/height
セルをch_img
に更新するとNullに設定したくないです。これをどうすれば処理できますか?MySQL ForeignKey:更新タイムスタンプでヌルを設定する
0
A
答えて
1
このようなタスクを処理するには、いくつかの方法があります。あなたが質問をする方法は、triggerを使用することがあなたのニーズに合っていることを示唆しています。これにより、ch_img
の変更を見て、条件付きで他のテーブルを更新するロジックを記述することができます。トリガのドキュメントは非常によく、多くの例があります。
あなたのコードは次のようになります:
delimiter |
CREATE TRIGGER my_trigger BEFORE UPDATE ON ch_img
FOR EACH ROW
BEGIN
IF NEW.removed_at > 0 THEN
UPDATE ch_services SET img_id = NULL WHERE img_id = NEW.id;
END IF;
END;
|
delimiter ;
しかし、あなたが考慮すべきトリガを使用しない理由があります。他のすべてのコードから離れて秘密の隠れ場所にビジネスロジックを記述していると考えてください。トリガーの追跡が失われたり、存在することさえ忘れたりするのは簡単です。
パフォーマンスを重視する場合を除き、すべてのロジックを1か所にまとめると、コードの保守が容易になると私は主張します。その場合は、コードに余分なクエリを書くだけで済みます。
私には強く反対する人もいます。
トリガーは間違いなく作業を完了しますが、プロセッサーのミリ秒がエンジニア時間以上の価値があるかどうかによって正しい答えが決まります。
関連する問題
- 1. MySQL特定の列をPHPで更新するときのタイムスタンプ
- 2. MySQLのタイムスタンプ自動更新
- 3. MySQLの複数のタイムスタンプ列を更新
- 4. カンタン更新タイムスタンプ
- 5. ジャンゴModelFormサブクラスのForeignKey更新
- 6. フェニックスのMySQLでタイムスタンプをマイクロ秒に設定する
- 7. 指定されたデータがmySQL内でヌルでない場合は、更新フィールド
- 8. mysqlタイムスタンプをデフォルトのnullに設定する、current_timestampを設定しない
- 9. MySQLの更新ローIDをOUTパラメータに設定する
- 10. root MySQLパスワードをヌルに設定できません
- 11. Cで設定ファイルを更新する
- 12. タイムスタンプ列のデフォルト値を、mySQLの2タイムスタンプの合計に設定しますか?
- 13. 変更がなくてもMYSQLのタイムスタンプ列自動更新?
- 14. タイムスタンプでパラメータを設定する方法
- 15. JSON_SETがMySQLのヌルJSONフィールドを更新していません
- 16. mysql設定変数(ft_min_word_len)を更新していますか?
- 17. 後でタイムスタンプ(文書内)でインデックス/更新要求を拒否するようにSolrを設定します
- 18. リストボックスのハイライトカラーをヌルに設定する
- 19. コンバータの値をヌルに設定する
- 20. datetimeをヌルに設定する
- 21. カサンドラの更新と挿入カラムをヌルに設定するにはどうすればいいですか?
- 22. 設定ファイルの更新/更新
- 23. タイムスタンプMysql Date_From既定値
- 24. MySQL:最後のパスワード更新のタイムスタンプを自動記録する方法
- 25. laravel設定ファイルが設定フォルダ内でヌルに戻ります
- 26. mysqlにタイマーを設定し、タイマーを00:00:00に設定した後にフィールドを更新する方法は?
- 27. スプリングブートデータレストJPA:@ManyToOneがDBのForeignKeyカラムを設定しない
- 28. 給与の挿入/更新の制限を設定するMySQLのトリガー
- 29. 設定された時間が経過した後にmysqlを更新する
- 30. LINQタイムスタンプ - タイムスタンプ列を自動的に更新しますか?
非常に良い回答です - ありがとうございます!私は初めてトリガーから聞くが、私はそれらが好きだ。しかし、私は、トリガーの追跡を非常に簡単に失う可能性があることに絶対に同意します。私はこれを扱うために外部キーにもっと簡単なオプションがあると思った。そうでない場合は、私のロジックを自分のコードに入れておくほうがよいでしょう。 – PhilHarmonie