我有一种情况,如果满足某个条件,我不希望发生插入(事务应该回滚)。我可以在应用程序代码中编写这个逻辑,但是由于某种原因,它必须用 MySQL 本身编写(比如用不同语言编写的客户端将插入到这个 MySQL InnoDB 表中)[这是一个单独的讨论]。
表定义:
CREATE TABLE table1(x int NOT NULL);
触发器看起来像这样:
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
NEW.x = NULL;
END IF;
END;
我猜它也可以写成(未经测试):
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
ROLLBACK;
END IF;
END;
但是,这不起作用:
CREATE TRIGGER t1 BEFORE INSERT ON table1 ROLLBACK;
您得到保证:
- 您的数据库将永远是 MySQL
- 表类型将始终为 InnoDB
- NOT NULL 列将始终保持原样
问题:您在第一种方法中看到任何令人反感的地方吗?