0

行数が 2000 を下回った場合、delete ステートメントを元に戻したい:

CREATE TRIGGER Trig1
AFTER DELETE ON Tab1

FOR EACH ROW
IF (SELECT COUNT(*) FROM Table1) < 2000
   BEGIN
      INSERT INTO Table1 (select * from old);
   END;
END IF;

しかし、それは機能していません。誰かが私が間違っていること、そしてこれがどのように見えるべきか教えてもらえますか?

4

3 に答える 3

1

試す、

INSERT INTO Table1
SELECT * 
FROM   old

覚えておくべきポイント

  • 使用しているため、テーブルの数とデータ型は両方のテーブルで一致する必要があります*
于 2012-11-26T01:23:53.643 に答える
0

このコードを試すことができます:

DELIMITER $$
DROP TRIGGER IF EXISTS `Trig1`$$
CREATE TRIGGER `Trig1`
AFTER DELETE ON Table1

FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM Table1) < 2000 THEN
    INSERT INTO Table2(field1, field2, field3) VALUES(old.field1, old.field2, old.field3);
END IF;
END$$

DELIMITER ;

私は実際にそれをテストしました、そしてそれは私の最後で動作します。

于 2012-11-26T02:17:26.700 に答える
0

BEFORE DELETE操作の結果レコードが少なすぎる場合は、エラーを発生させる (それによってステートメントを中止させる) トリガーを作成することで、うまくいくでしょう。

DELIMITER ;;

CREATE TRIGGER foo BEFORE DELETE ON Table1 FOR EACH ROW
IF (SELECT COUNT(*) FROM Table1) <= 2000 THEN SIGNAL SQLSTATE '45000' SET
  MESSAGE_TEXT = 'Cannot delete when table would result in too few records';
END IF;;

DELIMITER ;

SIGNALMySQL 5.5 でのみ導入されたことに注意してください。以前のバージョンを使用している場合は、代わりに、誤った操作を実行して MySQL に強制的に例外を発生させる必要があります。私はしばしばCALL、例えばCALL raise_error;.

于 2012-11-26T08:14:26.443 に答える