创建更新触发器时出现 MySQL 错误

标签 mysql sql

我正在创建一个 mysql 触发器(对触发器来说是全新的)并且我收到一个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5

代码是:

CREATE TRIGGER contact_name
AFTER UPDATE ON contacts
FOR EACH ROW
BEGIN
    SET full_name = CONCAT(NEW.fname,' ',NEW.lname) 
        WHERE contacts_id = $contacts_id;
END;

我完全不知道为什么它不让我设置触发器。

最佳答案

SET full_name = CONCAT(NEW.fname,' ',NEW.lname) WHERE contacts_id = $contacts_id;

这是无效的语法:

  • SET 不采用 WHERE 子句(sql 查询采用,如 SELECTUPDATE , 插入)

  • $contacts_id RDBMS 完全不知道

当对表 contacts 执行 UPDATE 时,您似乎试图自动更新字段 full_name 的值。

为此,您需要使用 BEFORE UPDATE 触发器(而不是 AFTER UPDATE),您可以在其中设置值 NEW.full_name。通常,确保在设置之前未在更新查询中给出该值也是一个好习惯:

CREATE TRIGGER foo BEFORE UPDATE ON contacts 
FOR EACH ROW
    IF NEW.full_name IS NULL THEN
        SET NEW.full_name := CONCAT(
            COALESCE(NEW.fname, OLD.fname),
            ' ',
            COALESCE(NEW.lname, OLD.fname)
        );
    END IF;;

关于创建更新触发器时出现 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495911/

相关文章:

update更新后的mysql触发器

c# - 如何阻止 BackgroundWorker 排队?

c# 在日期范围之间退款

php - mysql搜索查询代码问题

mysql - 在 MySQL 问题中搜索多个值

mysql - 合并两个具有唯一值的大表

php - 替代 "PDO::lastInsertId"/"mysql_insert_id"

php编码使用php将表单提交到服务器

php - 在 PHP 中打印出以逗号分隔的关联数组列的最简单方法(来自 MYSQL)

sql - MS-Access 查询中的语法错误(缺少运算符)