2

MySQL テーブルにトリガーがあります。テーブルには約 20 列あります。

DELIMITER $$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `completion_date_update`
BEFORE UPDATE ON `orders`
FOR EACH ROW
BEGIN
  IF NEW.`order_status` = 'COMPLETED' THEN
    SET NEW.`completion_date` = NOW();
  END IF;

  IF NEW.`order_status` != 'COMPLETED' THEN
    SET NEW.`completion_date` = NULL;
  END IF;
END$$

私が欲しいのは、列が更新されたときにのみcompletion_date列を更新するこのトリガーです。他の列が更新された場合、このトリガーは何もしません。 実際に起こっていることは、このトリガーが列の更新時に更新されていることです。order_status
completion_date

なぜこれが起こるのか、そして私が何を間違えたのか、誰かが私に説明できますか?

order_statuscolumn は NOT NULL であり、次のような値が考えられます:

enum('NEW','OPEN','COMPLETED','CANCELLED','REPLACED')

デフォルトは'NEW'

ありがとう

4

1 に答える 1

1

また、 が変更されているかどうかorder_status、および新しい値がCOMPLETED

IF (NEW.order_status <> OLD.order_status) AND (NEW.order_status = 'COMPLETED') THEN 
    SET NEW.completion_date = NOW();
END IF;

下の他のものを削除できIFます。

于 2013-01-22T05:43:06.937 に答える