我有一个审计表,它存储与用于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_ciAUTO_INCREMENT。我想做的是:
这是我最初的尝试,但它返回了一个错误:
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我做错了什么?
发布于 2020-10-07 02:08:23
只有更新前或更新后的触发器才有旧行。
插入触发器只有一个新行,这是清楚的,它们没有要替换的旧值。
在插入触发器中,只能使用NEW.col_name;没有旧行。在DELETE触发器中,只能使用OLD.col_name;没有新行。在更新触发器中,可以在行更新之前使用OLD.col_name引用行的列,在行更新后使用NEW.col_name引用行的列。
https://stackoverflow.com/questions/64236124
复制相似问题