【问题标题】:I cant get to execute the two statements in my trigger我无法在触发器中执行这两个语句
【发布时间】:2019-10-19 19:05:27
【问题描述】:

我希望两个语句都在我的触发器中执行。我无法使以下工作:

IF (flag = 'D') THEN
BEGIN
     INSERT INTO logs (id, author_id, action_done, description, old_value, new_value, create_date) 
     VALUES (null, (SELECT id FROM gallery WHERE flag = 'D'), 'Delete', 'Gallery', (SELECT filename FROM gallery WHERE flag = 'D'), '', NOW());
     DELETE FROM gallery WHERE flag = 'D';
END
END IF

【问题讨论】:

  • 执行 INSERT SELECT 而不是 INSERT VALUES。
  • 我正在使用 MySQL。你的方法我试过了,不行
  • 如果遇到错误,能否粘贴?
  • @SanenLongJa 。 . .您应该显示整个触发逻辑。

标签: mysql sql triggers


【解决方案1】:

我假设日志表中的 id 字段是主键,由系统自动生成。

试试这个:

IF (flag = 'D') THEN
BEGIN
     INSERT INTO logs (author_id, action_done, description, old_value, new_value, create_date) 
     select id, 'Delete', 'Gallery', filename, '', NOW() from gallery where flag='D'; 
     DELETE FROM gallery WHERE flag = 'D';
END
END IF

【讨论】:

    【解决方案2】:

    您的 id 应该自动递增,因此不应该是值之一。

    【讨论】:

      【解决方案3】:

      大概,您的触发器在桌子上gallery。如果是这样,您的触发器应该是“之前”或“之后”触发器,您可以这样做:

      IF (flag = 'D') THEN
      BEGIN
           INSERT INTO logs (author_id, action_done, description, old_value, new_value, create_date) 
               VALUES (old.id, 'Delete', 'Gallery', old.filename, '', NOW());    
      END;
      END IF
      

      无需重复DELETE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 2021-12-05
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多