我有一张表,由于未知原因,数据会被删除。我们认为可以帮助的一个步骤是在db中编写一个触发器,并可能在另一个表中记录一些值,我们可能认为这可能是罪魁祸首 到目前为止:
CREATE TRIGGER audit_log_delete after delete on usvn_users_to_projects BEGIN
insert into usvn_audit_delete(emp_id, emp_name, emp_is_adm ,ENTRY_DATE ) select
uu.users_id , uu.users_login ,uu. users_is_admin ,datetime('now') from usvn_users
uu,usvn_users_to_projects up where old.users_id=uu.users_id;
END;
但是这会在新表格中记录很多记录。
答案 0 :(得分:1)
SELECT连接两个表uu
和up
,但实际上并未在up
上使用任何连接限制。
因此,您将获得两个表的笛卡尔积,即,与WHERE条件匹配的每个uu
记录对于每个up
记录都会重复一次。
你实际上没有从up
表中读取任何内容(old.users_id
是一个独立于up
表的单个值),所以你应该放弃它:
CREATE TRIGGER audit_log_delete
AFTER DELETE ON usvn_users_to_projects
FOR EACH ROW
BEGIN
INSERT INTO usvn_audit_delete(emp_id,
emp_name,
emp_is_adm,
entry_date)
SELECT users_id,
users_login,
users_is_admin,
datetime('now')
FROM usvn_users
WHERE users_id = OLD.users_id;
END;