Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在插入之前创建触发器_Mysql_Sql_Mysql Workbench - Fatal编程技术网

Mysql 在插入之前创建触发器

Mysql 在插入之前创建触发器,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我正在尝试使用触发器更新已存在的条目。我想检查条目是否存在。如果不存在,请进行更新,然后插入。当我尝试插入新条目时,出现了一个错误:“无法更新存储函数/触发器中的表,因为调用此存储函数/触发器的语句已经使用了它。” DELIMITER // CREATE TRIGGER check_table_before_insert BEFORE INSERT ON Songs FOR EACH ROW BEGIN IF NEW.PageURL =( SELECT Songs.PageURL

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

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;

这不是触发器的适当用法

如果要对表执行插入或更新操作,请使用以下语法。它已经具备了您要寻找的语义


如果要更新的列相当于整行,则可以使用动词作为插入的替代。请注意,它将在插入新的行之前删除该行,因此替换查询中未包含的任何列都将丢失。

无法在触发器中避免此错误。