如何解决MySQL / MariaDB-插入后,删除符合指定条件的行触发
我有一个审核表,该表存储与用于ETL流程的中间表有关的信息。我在父表中有一个触发器,用于存储有关审核表中特定行执行的操作的操作。
CREATE TABLE `audit_table` (
`RowID` bigint(20) NOT NULL,`apptid` bigint(20) NOT NULL,`modified` bigint(20) NOT NULL,`type` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL,`data_push_id` bigint(20) NOT NULL,PRIMARY KEY (`RowID`,`apptid`,`type`,`data_push_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
- RowID-父表中的PK;主表中的此PK值
是
AUTO_INCREMENT
- apptid-父表中的PK
- 已修改-何时使用Unix时间戳 行最后修改
- type-执行的动作;可 “插入”或“删除”
- data_push_id-引用父项中的列 包含数据最后一次的批次ID的表 插入到父表中。因此data_push_id 1可以引用一个 父表中的某些记录集,data_push_id 2可以 请参阅另一组记录,依此类推。
我想做的是这个
- 在审核表中插入“删除”条目后...
- 如果有一个“插入”条目具有相同的行号...
- 插入“删除”行...
- 然后,立即删除该行号的“插入”和“删除”行。
这是我的初次尝试,但返回错误:
CREATE TRIGGER IF NOT EXISTS `test` AFTER Insert ON
`audit_table` FOR EACH ROW
IF (OLD.`rowid` = NEW.`rowid` AND NEW.`type` = 'Delete' AND OLD.`type` = 'Insert')
DELETE FROM `audit_table` duap_audit WHERE duap_audit.rowid = OLD.rowid
SQL Error [1363] [HY000]: (conn=18464) There is no OLD row in on INSERT trigger
我在做什么错了?
解决方法
只有更新前或更新后或触发前有旧行
INSERT TRIGGER仅具有一个NEW行,很明显,它们没有要替换的旧值
在INSERT触发器中,只能使用NEW.col_name。没有旧的行。在DELETE触发器中,只能使用OLD.col_name。没有新的行。在UPDATE触发器中,可以使用OLD.col_name引用更新前的行的列,而NEW.col_name引用更新后的行的列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。