【问题标题】:Creating a trigger before insert插入前创建触发器
【发布时间】:2019-07-30 02:12:11
【问题描述】:

如果已经存在,我正在尝试使用触发器更新条目。我想检查一个条目是否存在更新,如果不存在则插入。当我尝试插入新条目时出现错误:'无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用。

DELIMITER // 
CREATE TRIGGER check_table_before_insert BEFORE INSERT ON Songs FOR EACH ROW BEGIN IF NEW.PageURL =(
  SELECT 
    Songs.PageURL 
  FROM 
    Songs 
  WHERE 
    Songs.PageURL = NEW.PageURL
) THEN 
UPDATE 
  Songs 
SET 
  Songs.Title = NEW.Title, 
  Songs.Album = NEW.Album, 
  Songs.Label = NEW.Label, 
  Songs.Release_Date = NEW.Release_Date, 
  Songs.PageURL = NEW.PageURL, 
  Songs.IsSingle = NEW.IsSingle, 
  Songs.Code = NEW.Code, 
  Songs.ImageURL = NEW.ImageURL, 
  Songs.Link_320 = NEW.Link_320, 
  Songs.Link_128 = NEW.Link_128, 
  Songs.Link_48 = NEW.Link_48, 
  Songs.AlbumURL = NEW.AlbumURL 
WHERE 
  Songs.PageURL = NEW.PageURL;
END IF;
END;
// DELIMITER;

【问题讨论】:

  • 在触发器中没有办法避免这个错误。

标签: mysql sql mysql-workbench


【解决方案1】:

这不是触发器的适当用途。

如果要对表执行“插入或更新”操作,请使用INSERT … ON DUPLICATE KEY UPDATE … 语法。它已经具有您正在寻找的语义。

如果您要更新的列占整行,您可以使用REPLACE 动词来替代INSERT。请注意,它会在插入新行之前删除该行,因此REPLACE 查询中未包含的所有列都将丢失。

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多