1

私が書いたMYSQLトリガーは次のとおりです。

DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON myTable
    FOR EACH ROW
    BEGIN
    IF (OLD.column IS NOT NULL AND NEW.column IS NOT NULL AND NEW.column != OLD.column) THEN 
        SET NEW.col_updated_on = NOW();
    END IF;
END //
DELIMITER ;

column(たとえば、"movie") があり、それを更新して新しい値 "movie,music" を取得すると、トリガーが実行されcol_updated_on、現在のタイムスタンプが必要になります。

ただし、columnNULL を更新して新しい値「movie」を取得すると、col_updated_on列には古いタイムスタンプが表示されます。

この状態を確認するためにどのような変更を行う必要があるか教えてください。

返信ありがとうございます。

別の質問があります。以下の疑似は可能ですか??

これが私の2つのテーブルです -
myTable(id, someId, col_updated_on); myOtherTable(id、col1、col2);

myTablemyOtherTable.someId は.idと 1 対 1 の関係にあります

.col1 と.col2 が更新さmyTableれるたびに .col_updated_onを更新したい。どうすればいいですか?「BEFORE UPDATE」または「AFTER UPDATE」を使用する必要がありますか?myOtherTablemyOtherTable

4

1 に答える 1

3

NULL-safe 等値演算子を使用します。

IF NOT OLD.column <=> NEW.column THEN

ただし、MySQL のデータ型は、レコードが更新されるたびに自動的に更新TIMESTAMPできる (デフォルトでは更新する)ため、そのようなトリガーは不要であることに注意してください。

しかし、MySQL のようなリレーショナル データベースでは、複数の項目を区切られた文字列に格納しないでください。データベースの設計、特に 1 対多の関係について調べてください。各レコードが既存の (外部) テーブルの識別子 (キー) を単一のアイテムにリンクする別のテーブルを用意することで、はるかにうまくいくでしょう。次に、クエリで必要に応じてテーブルを結合します。

于 2012-07-24T06:13:17.200 に答える