0

如果删除语句使行数低于 2000,我想撤消它:

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

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 ;

请注意,SIGNAL仅在 MySQL 5.5 中引入。如果使用较早的版本,则必须改为强制 MySQL 通过执行错误操作引发异常;我经常CALL使用例如不存在的程序CALL raise_error;

于 2012-11-26T08:14:26.443 回答
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 回答