3

MySQLデータベースに「ルール」/インデックスを設定する方法はありますか?したがって、キャンセルと要求の2つの列がある場合、そのうちの1つだけが値で埋められる可能性があります。

したがって、キャンセルを1に設定した場合、クレームは1にすることはできず、逆の場合も同じようになりますか?

4

1 に答える 1

2

ここで推奨される解決策は、ステータスがまたはのいずれかである1つの列を持つようにスキーマを変更することです。ただしこれらがNULL以外のブール列であり、可能な状態が2つしかない場合です。cancelledclaimed

トリガーを使用して必要なことを実行できますがBEFORE UPDATE、それは、すでに過度に複雑なスキーマにさらに複雑さを重ねているように見えます。

UPDATE次のようなものですが、トリガーを頻繁に実行しないため、構文にはおそらく作業が必要です。

CREATE TRIGGER `trg_status` BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
  /* If the claimed was set to 1, set cancelled to 0 */
  IF OLD.cancelled = 1 AND NEW.claimed = 1 THEN 
    SET NEW.cancelled = 0;
  /* Or the opposite.... */
  ELSEIF OLD.claimed = 1 AND NEW.cancelled = 1 THEN
    SET NEW.claimed = 0;
  END IF
END
于 2012-12-29T19:55:52.270 に答える